gpt4 book ai didi

Angular2 - 如何链接异步 http 请求并在失败时停止

转载 作者:太空狗 更新时间:2023-10-29 18:30:57 24 4
gpt4 key购买 nike

我有一组 HTTP 请求,需要按特定顺序触发,但如果前一个请求失败,则不会执行后续请求。

  1. 我怎样才能做到这一点?

  2. 什么是最好的方法?

我需要这样的东西:

  let failed: boolean = false;
payloadArray.forEach(payload => {
if (!failed) {
http.post(this.url, payload, this.options)
.map((res: Response) => {
return res.json;
})
.catch((error: any) => {
failed = true;
Observable.throw(error.json().error || 'Server error')
});
}
}

最佳答案

这需要一个 Observable 创建者合并发出的值,但只在每个完成后按顺序订阅。我认为 RxJs 库中没有类似的东西。

我确实写了一个我认为会产生你想要的东西的工厂方法:

public sequence(requests: Array<Observable<Response>>): Observable<Response[]> {
return Observable.create((observer) => {
const output = [];

function executeHttp() {
const request = requests.pop();
if (request) {
request.take(1).subscribe((value) => {
output.push(value);
executeHttp();
}, (ex) => {
observer.error(ex);
});
} else {
observer.next(output);
observer.complete();
}
}

executeHttp();
});
}

请注意,我向 HTTP 可观察对象添加了一个 take(1) 运算符。这样做是为了在 HTTP observables 产生响应后销毁它们。这样您就不必调用取消订阅。您可以使用 take(1)first() 来做同样的事情,但是当没有发出任何东西时它们的工作方式不同。

如果您找到可以满足您要求的运算符(operator)。请告诉我。

关于Angular2 - 如何链接异步 http 请求并在失败时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45173069/

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