我有一个正在执行繁重工作的函数,因此我决定异步运行此函数,并防止在我的函数运行时冻结浏览器,但是在向函数添加诺言之后,什么也没有发生,并且浏览器仍然冻结,直到函数完成工作为止。所以我用一个简单的for循环模拟了我的函数繁重的工作,并在for循环内添加了一些额外的无用代码,以防止javascript引擎跳过for loop.so在我运行代码后,结果证明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应该将那个Promise推送到事件队列中,并且在for循环打印中的所有日志最终打印完成之后,但是不是这种情况。