我的问题是:尽管我使用了 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
函数真正做的是隐式返回一个承诺,该承诺用您的值来解决最终在函数内部返回(或者如果您拒绝throw
某物)。这就是为什么async-await
只能用于函数,因此不适用于顶层。
调用该函数的上下文完全不知道该函数是async
,它只是调用该函数,获取一个承诺,然后继续执行下一行代码。你的console.log()
生活在这个外部环境中,只能看到返回的承诺。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)