是自己使用多个for循环还是将逻辑委托给promises更高效?

Liq*_*uid 2 javascript performance promise typescript ecmascript-6

以下场景:一个函数获得一个具有一定长度的3个数组,每个数组都需要迭代才能找到匹配的对象.找到对象时,for循环断开,而不调用下一个.在这种情况下,无法合并数组.基本上是这样的:

for (let i = 0; i < array1.length; i++) {
  if (array1[i].id == matchingID) {
    returnValue = array1[i];
    break;
  }
}
if (!returnValue) {
  for (let i = 0; i < array2.length; i++) {
    if (array2[i].id == matchingID) {
      returnValue = array2[i];
      break;
    }
  }
}
if (!returnValue) {
  for (let i = 0; i < array3.length; i++) {
    if (array3[i].id == matchingID) {
      returnValue = array3[i];
      break;
    }
  }
}
return returnValue;
Run Code Online (Sandbox Code Playgroud)

在这种情况下使用promises会更有效吗,因为所有for循环都可以同时工作吗?像这样,每个函数调用从上面的例子中执行一个for循环(并解析找到的值):

return new Promise((resolve) => {
  this.findMatchingIDInArray1(array1)
    .then(() => resolve(returnValue));
  this.findMatchingIDInArray2(array2)
    .then(() => resolve(returnValue));
  this.findMatchingIDInArray3(array3)
    .then(() => resolve(returnValue));
}) 
Run Code Online (Sandbox Code Playgroud)

哪种方式更具性能?有没有更好的方法来做到这一点?谢谢你的帮助!

Ber*_*rgi 7

在这种情况下使用promises会更有效吗,因为所有for循环都可以同时工作吗?

不,你误解了承诺的作用.它们是一种使处理异步代码更容易的工具.您的用例中没有异步代码,因此您无法在此处使用promises.Promise不会"制造"任何异步,甚至不支持多线程并行.


T.J*_*der 6

在这种情况下使用promises会更有效吗,因为所有for循环都可以同时工作吗?

不,因为promises不会使任何异步或并行.它们只能用于观察已经异步或并行的事物.

所有在该代码上抛出promise的东西都会在主线程阻塞并增加开销时发生变化.

如果您需要卸载或并行化长时间运行的计算任务,请查看Web工作人员.