javascript - 承诺不会异步运行
问题描述
我有一个正在做繁重工作的函数,所以我决定异步运行这个函数,并在我的函数运行时防止浏览器冻结,但是在我向函数添加承诺后,什么也没发生,浏览器仍然冻结,直到函数运行完成。所以我用一个简单的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 循环中的所有日志应该被打印,但事实并非如此。
解决方案
推荐阅读
- python - cx-freeze 生成一些文件,但因出现长错误而停止,
- sql - 按 id 更新多列
- ios - AR 在我的 iOS 14 和 Xcode 12.3 上的 iOS 应用程序中无法正常工作,世界跟踪性能受到资源限制的影响
- flash - 如何在 IBM Datastage Hierarchical Data 中替换 Flash
- python - Scray shell URL 返回 404 进行无限滚动
- android - 使用底部导航片段仅调用一次 API
- linux - 在 docker 下使用来自 Perl 的 capget syscall 和 capsh --drop=cap_sys_admin
- javascript - 使用多种变体过滤 MongoDB 集合
- javascript - 寻找任何替代状态管理工具来做出反应,而不是 redux
- python - 在 Python 中编写带有标题的阿拉伯语 rtf 文件