首页 > 解决方案 > 即使使用了 promise 函数(javascript),for-loop 也会冻结屏幕

问题描述

我已经编写了这个方法,它正在计算 2 个 1000 个数据的数组,这很好,因为对数据无能为力,但随着程序的开始,我的整个屏幕都冻结了。我正在使用 promise 函数来克服这个问题。但即便如此,屏幕仍然冻结。(我也尝试过 forEach 循环,同样的冻结结果)。我需要一些方法来避免冻结问题。

someClickEvent(arrayOfSelectedFile,eventArray){
 this.documentCorrection(arrayOfSelectedFile,eventArray)
 .then((response)=>{
    console.log(response);
  })
}

documentCorrection(arrayOfSelectedFile, eventArray) {    
  let somedata;
    let promise = new Promise((resolve, reject) => {
      for (let i = 0; i < arrayOfSelectedFile.length; i++) {
        for (let j = 0; j < eventArray.length; j++) {
          somedata = this.someFunctionGoinOn(arrayOfSelectedFile[i], eventArray[j] );         
        }
      } 
      resolve(somedata);        
    });
    return promise;
  }

请注意,此方法已成功解决。但是在这个for循环过程中,屏幕冻结了。

标签: javascriptangularfor-loop

解决方案


你不应该一一返回promise并处理它。使用Promise.all。我像这样循环管理我的承诺。检查这个。它可能会帮助你。

function awaitAll(count) {
  const promises = [];
  count = 10;
  for (i = 0; i < count; ++i) {
    promises.push(asyncFn()); // async operation
  }

  return Promise.all(promises);
}

推荐阅读