首页 > 解决方案 > 即使没有解析,Promise.All 是一种以并行方式运行多个方法的方法吗?

问题描述

我是 Promise 的新手,我知道基本的 Promise 会采用一种方法来处理函数(resolve, reject) => { ... }并相应地处理结果,并且 Promise.all 似乎可以以并行方式处理一组函数。但是,我还在 Promise 中看到了一些函数的用法,这些函数没有(resolve, reject)作为输入而只是作为输入new Promise(() => { return 1 + 1;}),所以如果我有几个不需要的函数resolve,例如

function sum(a, b) { return a + b; }
function sub(a, b) { return a - b; }
function multiple(a, b) { return a * b; }

如果我在三个函数上使用 Promise.all,这是否意味着我正在并行运行其中的 3 个?就像是

Promise.all([()=>sum(1,2), ()=>sub(1,2), ()=>multiple(1,2)])

总体而言,Promise.all我们是否可以以并行方式运行多个 javascript 方法(无论是否异步,解析或不解析)?

标签: javascriptes6-promise

解决方案


不,Promise.all 接收一个像数组一样的迭代器。因此,当您调用 promise.all 时,它会遍历传递的元素。如果它们是函数,则如果您执行它们,则不会发生任何事情(死函数),则检查返回值,因此这些函数会同步运行。现在进一步它如何评估这些值如下所列。

var p = Promise.all([]); // will be immediately resolved
var p2 = Promise.all([1337, "hi"]); // non-promise values will be ignored, but the evaluation will be done asynchronously just once for promise.all
console.log(p);
console.log(p2)
setTimeout(function() {
    console.log('the stack is now empty');
    console.log(p2);
});

// logs
// Promise { <state>: "fulfilled", <value>: Array[0] }
// Promise { <state>: "pending" }
// the stack is now empty
// Promise { <state>: "fulfilled", <value>: Array[2] }

推荐阅读