在 angular 中抛出错误 "inside" observable
Throw an error "inside" an observable in angular
我想要与 ReplaySubject.next() 相同的行为,但对于错误 (ReplaySubject.nextError())
会使订阅的错误部分执行的东西
我知道 ThrowError
运算符,但它对我不起作用,因为它正在创建一个会抛出错误的新 observable,而我想要一个现有的 observable (ReplaySubject
)在订阅时抛出错误。
obs = ReplaySubject(1);
obs.nextError('some error');
obs.subscribe(res=> {'this should not execute')} err=>{console.log('this should execute')})
只需在 switchMap
中使用 throwError
。
of('some value')
.pipe(
switchMap((ms) => {
return throwError(() => new Error(`Errory McErrorFace`));
})
)
.subscribe({
next: console.log, // not called
error: console.error, // called
});
你可以在里面扔
import { ReplaySubject, tap } from 'rxjs';
const obs = new ReplaySubject(1);
obs.next('hello');
const obsConsumer = obs.pipe(
tap(() => {
throw 'err';
})
);
obsConsumer.subscribe({
next: (res) => {
console.log('this should not execute');
},
error: (err) => {
console.log('this should execute');
},
});
(我纠正了一些问题,比如没有使用new,使用deprecated方法订阅)
您可以使用.error(someError)
观察者有3个功能。 next
、error
和 complete
Subjects(和 ReplaySubjects)既是观察者又是可观察者,因此你可以对一个 subject 调用 .error
。
const a$ - new Subject();
a$.subscribe({
error: err => console.log("This is an error:", err);
});
a$.error("Imperatively emitted error");
我想要与 ReplaySubject.next() 相同的行为,但对于错误 (ReplaySubject.nextError())
会使订阅的错误部分执行的东西
我知道 ThrowError
运算符,但它对我不起作用,因为它正在创建一个会抛出错误的新 observable,而我想要一个现有的 observable (ReplaySubject
)在订阅时抛出错误。
obs = ReplaySubject(1);
obs.nextError('some error');
obs.subscribe(res=> {'this should not execute')} err=>{console.log('this should execute')})
只需在 switchMap
中使用 throwError
。
of('some value')
.pipe(
switchMap((ms) => {
return throwError(() => new Error(`Errory McErrorFace`));
})
)
.subscribe({
next: console.log, // not called
error: console.error, // called
});
你可以在里面扔
import { ReplaySubject, tap } from 'rxjs';
const obs = new ReplaySubject(1);
obs.next('hello');
const obsConsumer = obs.pipe(
tap(() => {
throw 'err';
})
);
obsConsumer.subscribe({
next: (res) => {
console.log('this should not execute');
},
error: (err) => {
console.log('this should execute');
},
});
(我纠正了一些问题,比如没有使用new,使用deprecated方法订阅)
您可以使用.error(someError)
观察者有3个功能。 next
、error
和 complete
Subjects(和 ReplaySubjects)既是观察者又是可观察者,因此你可以对一个 subject 调用 .error
。
const a$ - new Subject();
a$.subscribe({
error: err => console.log("This is an error:", err);
});
a$.error("Imperatively emitted error");