[英]async/await return Promise { <pending> }
我的問題是:盡管我使用了async / await,為什么為什么此日志“ promise {pending}”呢? 我檢查了類似的問題和答案,似乎應該可以,但事實並非如此。 我如何更改它以獲得結果,為什么? 謝謝。
const rp = require('request-promise-native');
async function sampleFunc() {
let sample = await rp({
uri: 'http://google.com',
jar: true
});
return sample;
}
async function f() {
return await sampleFunc();
}
console.log( f());
async-await
實際上只是諾言的語法糖,它不會使異步代碼同步運行(即,它不會阻止代碼執行)。 您的代碼等效於以下內容:
function sampleFunc() {
return new Promise(function(resolve) {
rp({
uri: 'http://google.com',
jar: true
}).then(function(sample) {
resolve(sample);
});
});
}
function f() {
return new Promise(function(resolve) {
sampleFunc().then(function(result) {
resolve(result);
});
});
}
console.log( f());
(是的,我知道上面的代碼演示了一種反模式。這只是出於說明目的)
如您所見, async
函數的真正作用是隱式返回一個promise,該promise將使用您最終在函數內部返回的值進行解析(如果throw
async
,則被拒絕)。 這就是為什么async-await
只能在函數上使用,因此不適用於頂層的原因。
調用該函數的上下文與該函數是async
這一事實完全無關,它只是調用該函數,得到一個承諾並移至下一行代碼。 您的console.log()
位於此外部上下文中,並且僅看到返回的承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.