根据输入的数据,我想决定它是否有效的数据,并发送可观察到的结束。
我试图创建一个可观察的、连续的subscribe.next()是正确的,但是任何错误都是随之而来的,在此之后,没有一个语句工作正常。
const observable = new Observable((subscriber) => {
subscriber.next(1);
subscriber.next(2);
subscriber.error('failed this after second');
subscriber.next(3);
subscriber.next(4);
subscriber.complete();
});
observable.subscribe({
next(x) {
console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
console.log('done');
},
});当前产出:
预期产出
下面是stackblitz链接https://stackblitz.com/edit/zlksm5?devtoolsheight=50&file=index.ts
发布于 2022-02-08 17:21:09
OnError:
强调我的。
如果你想要一件事情在它完成后继续前进,你就不想要一个可以观察到的东西。
走向解决
只需将错误作为值发出即可。您可以(例如)将您的排放量封装在RxJS 通知对象中,以便您可以观察materialize或dematerialize,并保持一致的排放API。
例如:
const observable = new Observable(subscriber => {
subscriber.next({ kind: "N", value: 1 });
subscriber.next({ kind: "N", value: 2 });
subscriber.next({ kind: "E", error: new Error("failed this after second") });
subscriber.next({ kind: "N", value: 3 });
subscriber.next({ kind: "N", value: 4 });
subscriber.next({ kind: "C" });
subscriber.complete();
});
/**** Alternative written more succinctly ****/
const observable = of(
{ kind: "N", value: 1 },
{ kind: "N", value: 2 },
{ kind: "E", error: new Error("failed this after second") },
{ kind: "N", value: 3 },
{ kind: "N", value: 4 },
{ kind: "C" }
);observable.subscribe((notification) => {
switch (notification.kind) {
case "N":
console.log("got value ", notification.value);
break;
case "E":
console.error("something wrong occurred: ", notification.error.message);
break;
case "C":
console.log("done");
}
});发布于 2022-02-08 17:25:51
我认为这是不可能的一个可观察的,因为可观察的将关闭,如果发生任何错误。
我尝试过几种方法,以供参考。
//interval(1000)
observable
//.pipe(switchMap(() => observable))
.pipe(
catchError((d) => {
observable.subscribe((nd) => {
console.log('--again--', nd);
});
return of(d);
})
//retry(1)
)
.subscribe({
next(x) {
console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
console.log('done');
},
});
// interval(1000)
// .pipe(switchMap(_ => observable))
// .pipe(
// catchError((d) => {return of(d)}),
// switchMap(_ => observable)
// )
// .subscribe(d => {
// console.log(d)
// })对于用例,最好使用行为主题。
https://stackoverflow.com/questions/71037622
复制相似问题