gpt4 book ai didi

javascript - 异步/等待返回 Promise { }

转载 作者:行者123 更新时间:2023-12-03 06:58:13 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why is my asynchronous function returning Promise { <pending> } instead of a value?

(8 个回答)


去年关闭。




我的问题是:尽管我使用了 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实际上只是 Promise 的语法糖,它不会使异步代码同步运行(即它不会阻止代码执行)。您的代码等效于以下内容:

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-await只能用于函数,因此不适用于顶层。

调用函数的上下文完全不知道函数是 async 的事实。 ,它只是调用函数,得到一个 promise ,然后继续下一行代码。您的 console.log()生活在这个外部环境中,只看到返回的 promise 。

关于javascript - 异步/等待返回 Promise { <pending> },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52120218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com