节点8:将promise / callback结构转换为async / await

时间:2018-02-09 16:49:50

标签: javascript node.js asynchronous promise

我有以下代码块:

new Promise((res, rej) => {
  if (checkCondition()) {
    res(getValue())
  } else {
    getValueAsync((result) => {
      res(result)
    })
  }
}).then((value) => {
  doStuff(value)
})

我想将其转换为使用async / await,但我无法弄清楚如何做到这一点。我知道当你专门使用promises时,用then()替换value = await ...的调用,但是如何使用回调来解决这个问题呢?有可能吗?

1 个答案:

答案 0 :(得分:1)

首先,您必须确保自己处于async功能中。然后它可能是:

async function example() {
  let value = (checkCondition() ? getValue() : await getValueAsync());
  doStuff(value);
}
await example();

但是,这假设您也可以修改getValueAsync,使其成为async函数或使其返回Promise。假设getValueAsync必须进行回调,我们无能为力:

async function example() {
  let value = (checkCondition()
      ? getValue()
      : await new Promise(res => getValueAsync(res))
    );
  doStuff(value);
}
await example();

您仍然可以获得不必自己创建完整Promise链的好处。但是,getValueAsync需要包含在Promise中才能与await一起使用。你应该仔细考虑这种改变是否值得你。例如。如果您掌控大部分代码库和/或您调用的大多数函数已经async / return Promise s。