[英]How to delay Observable which emits error
假设我有一个函数可以进行 http 调用并返回带有用户详细信息的 Observable。
如果用户不存在,它会返回发出错误的 Observable。
// Get user by id
function getUser(id) {
return Rx.Observable.create(obs => {
if (id === 1) {
obs.next('200 - User found');
obs.complete();
} else {
obs.error('404 - User not found');
}
});
}
// This will print "200 - User found" in the console after 2 seconds
getUser(1)
.delay(2000)
.subscribe(r => console.log(r));
// !!! Delay will not work here because error emmited
getUser(2)
.delay(2000)
.subscribe(null, e => console.log(e));
有什么方法可以延迟发出错误的 Observable 吗?
我很好奇为什么 Observable 在返回错误时不会延迟
下面是delay
运算符的源代码:
class DelaySubscriber<T> extends Subscriber<T> {
...
protected _next(value: T) {
this.scheduleNotification(Notification.createNext(value)); <-------- notification is scheduled
}
protected _error(err: any) {
this.errored = true;
this.queue = [];
this.destination.error(err); <-------- error is triggered immediately
}
protected _complete() {
this.scheduleNotification(Notification.createComplete());
}
}
与所有其他操作员一样, delay
订阅源流 - 在您的情况下为getUser()
- 并通知侦听器。 从源代码中可以看出,它不会在发生错误时安排通知并立即触发 observable 上的error
方法。
在这里您可以了解有关delay
运算符的更多信息。
我想延迟对 API 的每个 http 请求,无论它是否成功(以测试响应太长时应用程序的行为方式)
我建议使用 Chrome 调试工具(网络选项卡)的throttle
功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.