我需要传递一个Promise数组进去,然后返回一个得到结果集的数组 比如: let arr = [“1”,“2”,“3”]; Promise.all(arr) .then(res => { return Student.count({id: res}).exec(); }) .then(data => { console.log(data);//这儿输出的数组,里面存放的值是否和arr里面的顺序对上? })
是的,按顺序
@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状态了,就会一起返回结果。不过返回的结果还是按照进去的顺序排序的,和谁先执行谁先返回没有关系。