使用等待而不是Promises的正确方法是什么?

时间:2017-12-22 01:23:28

标签: javascript node.js asynchronous promise async-await

我长期使用Promise,而且他们总是""我用来控制我的程序的工作流程。例如:

Promise
  .resolve(obj)
  .then(doSomething1)
  .then(doSomething2)
  .catch(handleError)

现在,我想改成试用方式,但我不确切知道什么是正确的方法。

V1:

try {
  var body = await Promise
               .resolve(obj)
               .then(doSomething1)
               .then(doSomething2)
} catch (error) {
  callback(error)
}
callback(null, {
  statusCode: 200,
  body
})

V2:

try {
  var body = await Promise
               .resolve(obj)
               .then(doSomething1)
               .then(doSomething2)
               .then(body => {
                 callback(null, {
                   statusCode: 200,
                   body
                 })
               })
} catch (error) {
  callback(error)
}

什么是正确的方法?

1 个答案:

答案 0 :(得分:5)

您不必使用回调功能才能切换到async / awaitasync函数只是一个Promise-returns函数,await就是为了方便起见。所以相当于你原来的功能就是:

async function fn() {
  try { 
    const obj = ...;
    const result1 = await doSomething1(obj);
    const result2 = await doSomething2(result1);
    return result2;
  } catch (err) {
    return handleError(err);
  }
}

如果你确实想要那个回调:

async function fn(callback) {
  try { 
    const obj = ...;
    const result1 = await doSomething1(obj);
    const result2 = await doSomething2(result1);
    callback(null, result2);
  } catch (err) {
    callback(err);
  }
}