为什么async await函数返回一个值,而promise函数返回一个未定义的值?

时间:2019-09-29 18:30:53

标签: javascript promise async-await

我正在尝试使用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。

1 个答案:

答案 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