【发布时间】:2017-03-19 11:47:37
【问题描述】:
我有一个异步函数来处理来自列表的请求,但是当每个请求完成时,它不像之前声明的那样排序(因为它是异步的)。如何异步获取但保留原始顺序?
这是小提琴http://jsbin.com/papunixume/edit?html,js,console
// clear console every single run
console.clear()
// create promise
const cp = (msg, timeout) => {
return new Promise(resolve => {
setTimeout(() => {
resolve(msg)
}, timeout)
})
}
const a = cp('a', 1000)
const b = cp('b', 500)
const c = cp('c', 800)
Rx.Observable.of([a, b, c]).subscribe(val => {
val.map(res => {
res.then(x => console.log(x))
})
})
结果是
"b"
"c"
"a"
预期
"a"
"b"
"c"
【问题讨论】:
-
如果您希望调用的顺序准确,那么异步处理的意义何在?也许,如果您能告诉我们您想要实现的目标,我们可以帮助您提出一个想法。
-
你需要分解它,以便异步获取每个资源,然后使用
Promise.all等待所有获取完成;然后按照你想要的顺序处理资源。 -
你不需要 RxJS:
Promise.all([a, b, c]) -
是的,我认为
Promise.all足以做到这一点。谢谢大家
标签: javascript asynchronous rxjs