Promise.all 是先进先出吗?
假如我有一个数组,里面只存了id,我要根据这个id取异步查询数据。 代码如下:
var id_arr=[1,4,5,2];
var tasks=[];
for(var i in arr){
tasks.push(asyncQuery(arr[i]));
}
Promise.all(tasks).then(function(val){
//这里拿到的val数组里的顺序是我前面添加的顺序一样吗?是先进先出吗?
})
如果不是先进先出的话,我现在的需求是:id_arr其实就是这些数据的一个排名,我根据id拿到每个数据的详细信息,最后把整个数据显示出来。 有没有什么办法呢?
12 回复
就我以前试过,应该是按顺序的。
是按顺序的
@welefen @zouzhenxing 多谢!
@welefen O(∩_∩)O哈哈~
那另一个问题就来
var id_arr=[1,4,5,2];
var tasks=[];
for(var i in arr){
tasks.push(asyncQuery(arr[i]));
}
let result = yield tasks
此时的yield是按顺序的么?
'use strict'
let sleep = (time, info) => {
return new Promise(function (resolve) {
setTimeout(function () {
console.log(info)
resolve('this is ' + info)
}, time)
})
}
let loser = sleep(1000, 'loser')
let winner = sleep(4, 'winner')
// main
Promise.all([winner, loser]).then(value => {
console.log("所有都完成后会执行then,它们是并行的哦: " + value) // => 'this is winner'
})
$ node ../promise/api/all.js
winner
loser
所有都完成后会执行then,它们是并行的哦: this is winner,this is loser
@i5ting 好像确实是并行的,但是最终的value里的顺序好像和all里的顺序是一致的吧
@i5ting let result = yield tasks 肯定是按tasks的顺序的,不要问我为什么,我纯粹是猜的,呵呵。
@imhered 对呀,执行是先进先出,但并行执行(每项哪个先执行完成不好说),结果按顺序给,这点和yield数组是一样的
@i5ting 明白! <center>3Q</center>
@imhered <center><h1>哈哈
不是先进先出 所有都反回才会promise.all 才会resolve 执行是按array顺序执行 但是返回的的顺序就不一定了 From Noder
@IssicLzx 你错了。 执行是并行的,是不是按array顺序执行不一定,返回是按array的顺序。