gpt4 book ai didi

node.js - forkJoin 未将状态 401 作为 MEAN 应用程序中的错误传递

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:18 25 4
gpt4 key购买 nike

在我的 MEAN 应用程序中,我使用 Angular 6 中的 forkJoin 对我的服务器进行顺序调用。

每当请求数据时出现任何错误,我都会传递状态 401 以及错误对象。

我正在订阅请求,但error函数没有被触发。只有 data 函数被错误对象触发。

这是我的代码:

TS文件代码

forkJoin(
this.http.post(url1, obj1).pipe(map((res:Response) => res)),
this.http.post(url2, obj2).pipe(map((res:Response) => res))
).subscribe(
data => {

console.log('Data Called');

},
error => {

console.log('Error Called');


});

NodeJS 代码:

res.status(401).send({ error: "error", message: "Oops! Please try again" });
res.end();

最佳答案

首先,你想按顺序调用事物,你不应该使用forkJoin,它会一次性触发所有请求,然后等待所有请求完成。如果你想一一调用它们,请使用 concat

import { concat } from 'rxjs/operators';
import { of } from 'rxjs';

//emits 1,2,3
const sourceOne = of(1, 2, 3);
//emits 4,5,6
const sourceTwo = of(4, 5, 6);

//used as static
const example = concat(sourceOne, sourceTwo);

但除此之外。你的问题是为什么错误方法没有被触发。这是因为在处理过程中某个地方抛出错误时,观察者链就被破坏了。如果你想保护自己免受这种情况的影响,你必须将其缓存在有问题的可观察对象上。

forkJoin(
this.http.post(url1, obj1).pipe(map((res:Response) => res)).pipe(catchError(val => of('I caught: ${val}'))),
this.http.post(url2, obj2).pipe(map((res:Response) => res)).pipe(catchError(val => of('I caught: ${val}')))
).subscribe(
data => {
console.log('Data Called');
},
error => {
console.log('Error Called');
});

或者第二个选项是缓存它。但是,如果其中一个可观察量抛出错误,您将一无所获。

forkJoin(
this.http.post(url1, obj1).pipe(map((res:Response) => res)),
this.http.post(url2, obj2).pipe(map((res:Response) => res))
)
.pipe(catchError(val => of('I caught: ${val}')))
.subscribe(
data => {
console.log('Data Called');
},
error => {
console.log('Error Called');
});

文档清楚地说明了这一点: https://www.learnrxjs.io/operators/combination/forkjoin.html

关于node.js - forkJoin 未将状态 401 作为 MEAN 应用程序中的错误传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54477552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com