我目前正在自學 Javascript/Node.js,尤其是 aPromise和異步操作的概念。最近在查看 Github 上的一些代碼時,我遇到了一段奇特的代碼,我希望有人向我解釋。基本上在函式的末尾,有這樣的:
async myFunction() {
...
// Just wait forever, until signal
await new Promise(() => {});
}
最后一行實際上“做什么”?上面的評論只會讓它更加混亂。
當我嘗試執行代碼時,該函式從未回傳。所以我很好奇那應該做什么。有人可以向我解釋嗎?
uj5u.com熱心網友回復:
當您運行代碼時,Promise 將開始執行并等待來自內部方法簽名的回應() => {}。在回應回傳之前,Promise 將進入 Pending 狀態。但是,您可以承諾它永遠不會被解決。
意思() => {}是,給一組空引數(),傳入=>空體{}中使用。但是由于沒有引數并且主體是空的,我們基本上被卡住了。Promise 永遠不會實作,await因為沒有任何回傳值 -沒有回傳值。
通常,當您創建 Promise 時,您需要引入兩個引數(resolve、reject),這將導致兩個路徑,通過或失敗。滿足任何一個都將使 Promise 脫離待處理狀態,從而完成請求。
在此處閱讀此鏈接 -關于使用 Promise 的 Mozilla 檔案
該網站上提到的關鍵要點是必須始終回傳一個值。您所質疑的代碼await new Promise(() => {});不會回傳任何內容,但這不會阻止您的其他代碼片段在等待期間執行,因此它可能會保持某些行程處于活動狀態。
另一個有趣的注意事項是當您添加 athen()時:
async myFunction() {
await new Promise(() => {}).then(() => {
console.log("I will never print to console log");
});
console.log("me neither, due to being scoped to await/async");
}
myFunction();
將then()永遠不會執行,之后也不會執行任何操作。但如果你async\await拿出...
myFunction() {
new Promise(() => {}).then(() => {
console.log("I will never print to console log");
});
console.log("You'll see me in the console log");
}
myFunction();
console.log("You'll also see me in the console log too");
該承諾之后的任何事情都會運行。
uj5u.com熱心網友回復:
這是因為這個 Promise 沒有解決或拒絕,并且永遠處于待處理狀態。
await new Promise((resolve) => { resolve()});
上面的代碼將終止您的代碼,因為 promise 已解決。看看這是否有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517878.html
下一篇:并發字典讀取和洗掉專案并行
