Javascript 如何延迟发出误差的可观测值

Javascript 如何延迟发出误差的可观测值,javascript,angular,rxjs,Javascript,Angular,Rxjs,假设我有一个函数,可以进行http调用并返回用户详细信息 如果用户不存在,它将返回Observable,从而发出错误 //按id获取用户 函数getUser(id){ 返回Rx.Observable.create(obs=>{ 如果(id==1){ obs.next('200-找到的用户'); obs.complete(); }否则{ obs.error('404-未找到用户'); } }); } //这将在2秒钟后在控制台中打印“200-用户已找到” getUser(1) .延迟(2000年)

假设我有一个函数,可以进行http调用并返回用户详细信息

如果用户不存在,它将返回Observable,从而发出错误

//按id获取用户
函数getUser(id){
返回Rx.Observable.create(obs=>{
如果(id==1){
obs.next('200-找到的用户');
obs.complete();
}否则{
obs.error('404-未找到用户');
}
});
}
//这将在2秒钟后在控制台中打印“200-用户已找到”
getUser(1)
.延迟(2000年)
.subscribe(r=>console.log(r));
// !!! 由于出现错误,延迟在此不起作用
getUser(2)
.延迟(2000年)
.subscribe(null,e=>console.log(e));
是否有任何方法可以延迟发出错误的可观察到的时间

我很好奇,如果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());
  }
}
类延迟订阅者扩展订阅者{
...
受保护_next(值:T){

this.scheduleNotification(Notification.createNext(value));为什么要延迟它?我想延迟对API的每个http请求,不管它是否成功(以测试如果响应太长,应用程序将如何运行)您正在编写测试吗?您通常应该使用浏览器网络选项卡节流功能来模拟长请求。我发现了一个关于模拟api的线程:另一个关于如何模拟api调用超时的线程(这不是您想要的错误,但它可以为您指出正确的方向):@Maximus,devtool网络选项卡节流很酷。但问题不在http请求中(这只是一个示例)。我很好奇,如果Observable返回错误,为什么它不会延迟。