我的函式順序有問題,我不確定為什么。
將滑鼠懸停function_2在第一個函式中的呼叫上時,VSCode 給我結果Promise<void>,并且在運行時控制臺輸出undefined(function_2()甚至在完成之前)。
由于我在 VSCode 中進行編輯,因此當我將滑鼠懸停在 a 上時,它會在頂部告訴我return它是用于request回呼的,因此我對問題所在有一個大致的了解。過去我不知道,這很可能是由于我對承諾的回報和/或腳本中事情發生的真實順序缺乏了解。
我的代碼中的其他所有內容都可以正常作業。
我在沒有運氣的情況下對此進行了廣泛的研究(在本網站和一些通用代碼檔案中),但是如果我遺漏了什么,請告訴我。
我在下面列出了我的函式的一般順序,以及return呼叫的位置。
async function_1() {
const check = await function_2();
return console.log(check);
}
async function_2() {
...
if(...){
...
request(... => {
...
while(...) {
if(...) {
...
return 'result'; //<<<RETURN
}
await msg.channel.awaitMessages({
...
}).then((c) => {
if() {
...
if() {
...
return 'result'; //<<<RETURN
};
} else if {
...
return 'result'; //<<<RETURN
} else {
};
}).catch((c) => {
...
return 'result'; //<<<RETURN
});
}; //<<<end 'while'
}); //<<<end 'request'
}; //<<<end 'if'
};
如果我的解釋不清楚,或者需要更多代碼,請告訴我。
uj5u.com熱心網友回復:
VSCode 能夠分析您的代碼并得出結論,它始終回傳Promise<void>一個 void,回傳與此背景關系中的 undefined 相同。
首先Promise<T>總是從async函式回傳。
其次,在對request(... => {您提供回呼的呼叫中,此回呼的回傳值由request而不是function_2使用。
這意味著您的回呼中的 return 永遠不會回傳任何值function_2。
如果你想從父級回傳一個值,function_2你可以像這樣解決一個自定義Promise:
function function_2() { // note: not async because we already return a Promise
return new Promise((resolve, reject) => {
request(() => {
/* ... */
resolve("some value"); // effectively returns a value to the Promise
if (error) {
reject(error); // throw an error
}
/* ... */
});
});
}
try {
const value = await function_2();
console.log(value); // "some value"
} catch(e) {
console.error(e);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/459678.html
上一篇:從物件陣列中獲取學生的出現
