请问Promose.all()是先进先出吗?
发布于 7 年前 作者 shanzemin 4150 次浏览 来自 问答

我需要传递一个Promise数组进去,然后返回一个得到结果集的数组 比如: let arr = [“1”,“2”,“3”]; Promise.all(arr) .then(res => { return Student.count({id: res}).exec(); }) .then(data => { console.log(data);//这儿输出的数组,里面存放的值是否和arr里面的顺序对上? })

7 回复

@Lizhooh 好的,谢谢!但是我还是要问下你,你有写过测试的例子吗?

function test1(){ return new Promise(function(resolve, reject) { setTimeout(function() { console.log(“执行完成111”); resolve(“111”); }, 3000); }); }

function test2(){ return new Promise(function(resolve, reject) { setTimeout(function() { console.log(“执行完成222”); resolve(“222”); }, 2000); }); }

function test3(){ return new Promise(function(resolve, reject) { setTimeout(function() { console.log(“执行完成333”); resolve(“333”); }, 1000); }); }

let arr = [test1(),test2(),test3()]; Promise.all(arr) .then(res => { console.log(res); });

执行结果如下:

执行完成333 执行完成222 执行完成111 [‘111’,‘222’,‘333’]

也就是说,数组里面的Promise谁先执行完谁先resolve,但是对最后返回的数组没有影响,还是按照传进去的数组进行排序了,也就是题目上所说的“先进先出”。

Promise.all([])的方法最主要的,是将多个Promise对象聚合成一个Promise对象,多个promise对象是一起执行,不存在先后关系~~

Promise.all是参数数组中所有的promise都得到了resolve状态才会自己resove的一个promise…所以应该是一起进,一起出,先出来的等后出来的.res就是结果组合在一起的一个数组.

一起进一起出

@leemove 嗯嗯,对的。当所有的promise对象都是resovle状态了,就会一起返回结果。不过返回的结果还是按照进去的顺序排序的,和谁先执行谁先返回没有关系。

回到顶部