簡體   English   中英

異步/等待返回Promise { <pending> }

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM