sách gpt4 ai đã đi

RxJS:即使在源 observable 上使用 `shareReplay()`, `throwError()` 也会为每个 observable 单独执行

In lại 作者:行者123 更新时间:2023-12-04 09:57:51 27 4
mua khóa gpt4 Nike

我正在使用 RxJS shareReplay()可观察对象( courses$ )上的运算符,以在其他两个可观察对象( beginnerCourses$advancedCourses$ )之间共享可观察流。它工作正常,成功时在两个可观察对象之间共享单个 API 调用响应。

但是,当涉及到错误时,这些 observable 不会共享错误,并且在浏览器控制台中会看到错误被抛出两次。没有 shareReplay()运营商也分享错误?这是预期的行为吗?

const http$ = createHttpObservable('/api/courses');

const courses$ = http$
.pipe(
map(res => res['payload'] ),
shareReplay(),
catchError(err => {
return throwError(err);
})
);

this.beginnerCourses$ = courses$
.pipe(
map(courses => courses
.filter(course => course.category === 'BEGINNER')));

this.advancedCourses$ = courses$
.pipe(
map(courses => courses
.filter(course => course.category === 'ADVANCED')));

}

1 Câu trả lời

当 observable 抛出错误时,这是预期的行为,shareReplay() 将尝试重新订阅/重新执行源

你可以试试这个来验证

const a=defer(()=>{
console.log('run')
return throwError(new Error('Error'))
}).pipe(shareReplay())

a.subscribe(console.log,console.error,()=>console.log('complete'))
a.subscribe(console.log,console.error,()=>console.log('complete'))

https://stackblitz.com/edit/typescript-jutfxe

如果您希望 observable 在不再次执行的情况下共享错误
sử dụng publishReplay(1),refCount()反而

关于RxJS:即使在源 observable 上使用 `shareReplay()`, `throwError()` 也会为每个 observable 单独执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61884807/

27 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com