javascript - Nodejs 在使用 Promise 时阻塞代码。为什么?
问题描述
我正在学习 nodejs,我需要处理一些密集的 cpu 计算。我尝试执行以下代码来了解它:
工作过:
const code1 = () => {
return Promise.resolve().then(
() => {
console.log('Waiting...');
let i = 0;
while (i < 10000000000) { i++; }
return 'Exited'
}
)
}
const code2 = async () => {
const resolve = await Promise.resolve();
console.log('Waiting...');
let i = 0;
while (i < 10000000000) { i++; }
return 'Exited';
}
没用:
async function code3() {
return new Promise((resolve, reject) => {
console.log('Waiting...');
let i = 0;
while (i < 10000000000) { i++; }
resolve('Exited');
})
}
async function code4() {
console.log('Waiting...');
let i = 0;
while (i < 10000000000) { i++; }
return 'Exited'
}
测试:
console.log('Script start');
// Execute "async" code. I've changed the code<number> to [1,2,3,4]
code1().then(console.log).catch(console.log);
const t = 3E3 * 3;
console.log('Do some stuff: 3+3 = ' + t)
console.log('End')
问题*:我想知道为什么code3
andcode4
不能异步工作。它阻塞了主代码,直到运行承诺,然后,返回'End',然后返回'Exited'
解决方案
推荐阅读
- ansible - Ansible:在其他主机上运行的任务中使用主机变量访问自定义事实(set_facts)时未定义
- c++ - 在类构造函数中初始化向量
- javascript - 在 setter 函数中获取堆栈溢出
- continuous-integration - 使用管道的 BitBucket 管道
- node.js - 媒体如何处理粘贴链接和嵌入链接
- python - 烧瓶代理服务器
- algorithm - 仅使用堆从任意整数数组中查找中位数
- javascript - onChange() 计数 Ant TreeSelect 中的节点
- r - 错误:无效:使用箭头包从 url 加载镶木地板文件时,URI 中的文件系统类型无法识别
- c# - 每当我在 C# 中单击按钮时,如何将项目附加到另一个窗口中的列表框?