2 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
為什么Promise中的循環(huán)會阻止代碼的執(zhí)行?
這就是JavaScript執(zhí)行模型(在Browsers和Node中)。您的代碼永遠(yuǎn)不會被搶占,代碼始終從頭到尾運行,并且只能為平臺“注冊”代碼以便以后運行。
promise構(gòu)造函數(shù)同步運行。承諾不會在您的代碼中引入線程,它們只會將正在then
回調(diào)中的運行代碼推遲到“所有同步代碼之后”,但推遲到所有平臺代碼之前。
承諾只是將來值的句柄-它們不會使您的代碼在另一個線程上執(zhí)行。如果您需要在另一個線程上運行代碼,則需要worker_threads
在瀏覽器中使用(在Node.js中)或Web Worker。

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊
問題是您的諾言不包含任何異步代碼。如果不想等待在function1的promise中執(zhí)行的代碼,則需要在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();
添加回答
舉報