2 回答
TA贡献1801条经验 获得超8个赞
为什么Promise中的循环会阻止代码的执行?
这就是JavaScript执行模型(在Browsers和Node中)。您的代码永远不会被抢占,代码始终从头到尾运行,并且只能为平台“注册”代码以便以后运行。
promise构造函数同步运行。承诺不会在您的代码中引入线程,它们只会将正在then
回调中的运行代码推迟到“所有同步代码之后”,但推迟到所有平台代码之前。
承诺只是将来值的句柄-它们不会使您的代码在另一个线程上执行。如果您需要在另一个线程上运行代码,则需要worker_threads
在浏览器中使用(在Node.js中)或Web Worker。
TA贡献1862条经验 获得超7个赞
问题是您的诺言不包含任何异步代码。如果不想等待在function1的promise中执行的代码,则需要在setTimeout中编写它。
function function1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
let i = 5000000000;
while (i > 0) {
i--;
}
resolve("print function1!!!");
}, 0);
});
}
function function2() {
console.log("print function2!!!");
}
function function3() {
function1().then(data => console.log(data));
function2();
}
function3();
添加回答
举报