我正在尝试使用async-await和promise来理解以下两个示例函数。
我希望两个函数都返回“输出”,但是使用promise的函数将返回未定义的值。
为什么会这样?我已经在promise.resolve()。then()中返回了值,但毕竟没有返回值。
在我的项目上工作时遇到了这个问题。我正在使用promise方法返回值,但是没有返回值。然后,我使用async-await解决了问题,但我不明白为什么?
async function asyncFunction(input) {
try {
let output = await Promise.resolve("output");
return output;
} catch (err) {
console.log(err);
}
}
function promiseFunction(input) {
Promise.resolve().then(function() {
return "output";
}).catch(function(err){
console.log(err);
})
}
async function run() {
let a = await asyncFunction();
let b = await promiseFunction();
console.log("async function output: " + a); //async function output: output
console.log("promise function output: " + b); //promise function output: undefined
}
run();
我希望asyncFunction()和promiseFunction()都返回值“ output”,但是promiseFunction会返回undefined。
答案 0 :(得分:2)
async
函数始终返回承诺。如果您在正常函数中省略了return语句,例如:
function doSomething(x) {
x.y = 2;
}
然后返回未定义。
doSomething({}) === undefined // true
如果您在async
函数中省略了return语句
async function doSomething(x) {
x.y = 2;
}
它返回一个未定义的承诺
doSomething({}).then(result => result === undefined); // resolves to be true
在您的非async
函数中,您什么也不返回。您需要return
Promise.resolve().then(...)
行。这是使用async/await
语法的好处之一。无需担心正确地链接您的诺言和回报。只需完成您的工作,在需要的地方await
,并在值return
。