即使在使用promise函数(javascript)后,for循环仍会冻结屏幕

即使在使用promise函数(javascript)后,for循环仍会冻结屏幕,javascript,angular,for-loop,Javascript,Angular,For Loop,我已经写了这个方法,它是计算两个1000的数据数组,这是很好的,因为没有什么可以做的数据,但随着程序开始,我的整个屏幕冻结。我使用承诺函数来克服这个问题。但即便如此,屏幕还是冻结了。 (我也尝试过forEach循环,结果相同)。我需要一些方法来避免冰冻问题 someClickEvent(arrayOfSelectedFile,eventArray){ this.documentCorrection(arrayOfSelectedFile,eventArray) .then((response

我已经写了这个方法,它是计算两个1000的数据数组,这是很好的,因为没有什么可以做的数据,但随着程序开始,我的整个屏幕冻结。我使用承诺函数来克服这个问题。但即便如此,屏幕还是冻结了。 (我也尝试过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;
  }
someClickEvent(arrayOfSelectedFile,eventArray){
此.documentCorrection(arrayOfSelectedFile,eventArray)
。然后((响应)=>{
控制台日志(响应);
})
}
documentCorrection(arrayOfSelectedFile,eventArray){
让一些数据;
让承诺=新承诺((解决、拒绝)=>{
for(设i=0;i

请注意,此方法已成功解决。但在这个for-loop过程中,屏幕被冻结。

您不应该一个接一个地返回承诺并处理它。使用承诺。全部。 我把我的承诺像这样循环管理。看看这个。这可能对你有帮助

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

  return Promise.all(promises);
}
函数等待全部(计数){
常量承诺=[];
计数=10;
对于(i=0;i
似乎计算范围相当广泛,因此您可能希望查看WebWorkers,将这些计算转移到其他线程。更新。。。上面的一个只是一个实际问题的模式,我已经解决了。你可以使用
Promise。race
没有帮助!这太令人沮丧了。因为这个问题,一个好的应用程序看起来很糟糕。我的错误是它让你这么想,我知道
承诺。所有的
。我在问题中提到的代码只是原始函数的模式。我只在两个for循环的末尾解析一次。