我正在學習Js的事件回圈并嘗試運行這個函式:
async function foo() {
console.log('FIrst');
let a = await new Promise((resolve,reject)=>{
console.log("inside Promise");
resolve();
})
console.log(a);
console.log('Second');
}
foo();
console.log('Three');
在運行此代碼時,輸??出如下:
FIrst
inside Promise
Three
undefined
Second
我無法理解為什么a會失去它的價值(物件分配)。我已經搜索過這種行為,但無法從答案中理解。有人可以解釋導致此輸出的執行順序是什么。
uj5u.com熱心網友回復:
當您await新創建的 Promise 時,您并沒有將 Promise 分配給a,而是分配它的 resolve 值。
async function foo() {
let a = await new Promise((resolve, reject) => {
// This is where the value stems from
resolve(42);
});
console.log(a);
}
foo();
如果您想await同時檢索參考,則可以將這兩個步驟分開:
async function foo() {
let a = new Promise((resolve, reject) => {
resolve(42);
});
await a;
console.log(a instanceof Promise);
}
foo();
uj5u.com熱心網友回復:
這是因為如果你正在使用它,它會將你傳入的東西await回傳給變數,所以你沒有在 resole 中傳遞任何值,這就是它的原因aresolveundefined
uj5u.com熱心網友回復:
承諾的值未定義的原因是因為您沒有設定承諾應該輸出的值。如果您希望 promise 回傳 undefined 以外的內容,請在 resolve() 函式中放置一個運算式或字串。如果您希望承諾在解決并 console.log 結果后回傳“承諾完成”,只需使用代碼
async function foo() {
let a = await new Promise((resolve,reject)=>{
resolve("Promise completed");
})
console.log(a);
}
foo();
uj5u.com熱心網友回復:
我無法理解為什么 a 失去了它的價值(物件分配) - 因為你沒有解決任何承諾,例如。resolve('你想在這里解決的任何問題'); 將分配給a。在您的情況下,您沒有解決任何問題。因此,a 保持未定義。
也用于理解執行順序。請閱讀 Javascript 中的承諾。您可以參考 YouTube 上名為Namaste Javascript的著名系列來了解 eventLoop。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/489924.html
標籤:javascript
