首页 > 解决方案 > 承诺不会异步运行

问题描述

我有一个正在做繁重工作的函数,所以我决定异步运行这个函数,并在我的函数运行时防止浏览器冻结,但是在我向函数添加承诺后,什么也没发生,浏览器仍然冻结,直到函数运行完成。所以我用一个简单的for循环模拟了我的函数繁重的工作,并在for循环中添加了一些额外的无用代码,以防止javascript引擎跳过for循环。所以在我运行代码后,结果证明for循环不会异步运行,所以什么这里错了吗?

这是模拟我的问题的示例代码:

new Promise(resolve =>{
  //some heavy task
  for(let i=0 ; i<10000; i++){
      if(i % 2 == 0){
          console.log(i);
      }
  }
  resolve();
}).then(()=>{
  console.log("finished")
})
console.log("javascript engine should continue running");

因此,在我的想法中,首先必须运行最后一行控制台日志,因为 javascript 应该将该承诺推送到事件队列中,并且在最后打印的 for 循环中的所有日志应该被打印,但事实并非如此。

标签: javascriptasynchronouspromise

解决方案


推荐阅读