Promise.all 是先进先出吗? - CNode技术社区

Promise.all 是先进先出吗?
发布于 10 年前 作者 im-here 8734 次浏览 最后一次编辑是 9 年前 来自 问答

假如我有一个数组,里面只存了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 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的顺序。

回到顶部

AltStyle によって変換されたページ (->オリジナル) /