这是我的代码:
import { interval, throwError } from "rxjs";
import { take, map } from "rxjs/operators";
interval(1000)
.pipe(
take(5),
map(x => {
if (x > 0) {
// throw new Error("error");
return throwError(x);
}
return x;
})
)
.subscribe(
data => {
console.log("data------>", data);
},
error => {
console.log("error------>", error);
}
);
我尝试使用throwError
在流的开始处返回错误,但是根据控制台日志,它们全部都落入了订阅成功处理程序中,该错误都是可观察到的。
但是,我希望错误落入错误处理程序中。我认为我必须误解了throwError
的工作方式。我错过了什么?我怎样才能解决这个问题?而且我发现只有当我抛出真实的new Error
时,错误才会落入错误处理程序
这里是演示:demo
答案 0 :(得分:1)
throwError
将返回Observable
,而map
ping只会将原始值包装在两个Observable
中。
尝试返回包含数字的Observable
,而不是简单地在number
之外返回if
。您可以使用of
来做到这一点。
类似这样的东西:
import { interval, throwError } from "rxjs";
import { of } from "rxjs";
import { take, switchMap } from "rxjs/operators";
interval(1000)
.pipe(
take(5),
switchMap(x => {
if (x > 0) {
// throw new Error("error");
return throwError(x);
}
return of(x);
})
)
.subscribe(
data => {
console.log("data------>", data);
},
error => {
console.log("error------>", error);
}
);
这是您推荐的Working Sample Demo。