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

问题描述 投票:3回答:1

我已经使用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)
}

什么是正确的方法?

javascript node.js asynchronous promise async-await
1个回答
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);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.