javascript - 即使没有解析,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 方法(无论是否异步,解析或不解析)?
解决方案
不,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] }
推荐阅读
- node.js - 传感器数据收集的 MongoDB 查询
- angular - 如何使用打字稿重新渲染多个数据表?
- r - 使用 geom_point + aes 函数时的“二元运算符的非数字参数”
- javascript - Chart.js yAxis 旋转
- distinct - Mule 4:DW2 - 对象数组,按对象字段区分
- directx - 在 DirectX 中绘图之前是否需要清除缓冲区?
- fortran - 部分和的 Fortran OpenMP 计算
- python - 如何仅在数据框中第一次拆分之前拆分文本?
- php - 使用 php 从数据库中获取 Woocommerce 的最后一个订单 ID
- mapbox - 如何将事件侦听器添加到 mapbox 图像/栅格图层?