Rxjs 如何按顺序执行 Promise
Rxjs 如何按顺序执行 Promise
相关代码
const { of, from, forkJoin } = require("rxjs");
const { catchError } = require("rxjs/operators");
const the_test1 = new Promise((resolve, reject) => {
setTimeout(() => {
reject("fail");
}, 2000);
});
const the_test2 = new Promise(resolve => {
setTimeout(() => {
resolve("success");
}, 2000);
});
const the_test3 = new Promise(resolve => {
setTimeout(() => {
resolve("success");
}, 2000);
});
const promiseToObservable = promise => {
return from(promise).pipe(catchError(err => of(err)));
};
const StartTime = new Date().getTime();
forkJoin([
promiseToObservable(the_test1),
promiseToObservable(the_test2),
promiseToObservable(the_test3)
]).subscribe(val => {
console.log(val);
console.log(new Date().getTime() - StartTime);
});
在线调试
https://codesandbox.io/s/bold-blackburn-p2nhy
问题描述
希望等待 the_test1 执行完成后再执行 the_test2,the_test2 执行完成后再执行 the_test3。6s 后返回结果而不是并发执行。
你期待的结果是什么?
目前为并发执行,大约 2s 左右返回接口,希望串行,大约 6s 左右返回结果
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先你要明白
new Promise(executor)
的executor
方法是立即执行的,所以你的问题不在 RxJS 而在你创建几个the_test
的时候就已经开始跑异步逻辑了。解决方式有很多种,下面是一个例子