首页 > 解决方案 > 如何执行数组在平行下

问题描述

我有一个带有回调函数的数组,所以一个Array<Function> | Array<AsyncFunction>. 我正在尝试找到一种方法并行调用这些回调

Promise.all如果我有一份承诺清单,我知道会这样做。但我并没有成功地用我的投入来完成这项工作

所以要添加更多细节:

假设我有一组像这样的匿名函数

let callbacks = [
    () => {console.log('callback')},
    () => {console.log('another callback');
    () => {console.log('final callback');
];

并行执行这些回调的最佳方法是什么?

标签: javascripttypescriptpromiseparallel-processing

解决方案


Javascript 在设计上是单线程语言。所以引擎只能同时解析一个函数。
这些函数被堆叠到调用堆栈中并由事件循环处理。这意味着,即使有 Promise,引擎也一次只处理一个函数。
一旦所有的承诺都得到解决Promise.all([...]),您就可以委托处理这些调用以继续运行您的代码(在then方法内部或等待)。
这并不意味着所有的 Promise 都是并行执行的。


通过使用称为Web Workers的多引擎系统,有一种解决方法具有这种行为,https://www.sitepoint.com/javascript-web-workers/


推荐阅读