在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function他們說寫作
async function foo() {
return 1
}
和寫作一樣
function foo() {
return Promise.resolve(1)
}
所以這意味著如果我們想將一個 promise '轉換'為一個異步函式,我們必須resolve(promise_result)用return promise_result.
但是,當我嘗試使用setTimeout與async它不作業:
const test1 = async () => {
setTimeout(
() => {
return 5;
},
2000,
)
}
const test2 = () => new Promise(
(resolve, reject) => {
setTimeout(
() => resolve(25),
1000
)
}
)
const execute = async () => {
const result = await test1();
console.log(result); // undefined
}
execute();
如果我使用await上test2它的作業原理,但它不作業的test1。這是為什么 ?難道async/await只是為了處理不使用待定的承諾.then或者我可以用async用return result,而不是使用Promise與resolve?
uj5u.com熱心網友回復:
它未定義,因為test1不回傳任何東西。仔細看看你在匿名函式中回傳它
const test1 = async () => { // <--- this function returns nothing back. Nothing means "undefined"
setTimeout(
() => { // <---- you return it here back in your anonymous function witch makes no sense
return 5;
},
2000,
)
}
uj5u.com熱心網友回復:
這是一個有趣的。這里的問題是
const test1 = async () => {
setTimeout(
() => {
return 5;
},
2000,
)
}
test1 是一個異步函式,但setTimeout不是。
setTimeout只會安排您傳遞的任何內容并立即回傳其 timeoutID。在這種情況下,您真的需要手動處理 Promise 代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/354392.html
標籤:javascript 异步 异步等待 承诺
上一篇:Kotlin中運算子::的模擬
下一篇:在兩個事件發生后采取行動-JS
