Javascript 在承诺链中使用wait

Javascript 在承诺链中使用wait,javascript,node.js,async-await,Javascript,Node.js,Async Await,我刚升级到节点8,想开始使用async/await。我遇到了一个错误,花了我一段时间才解决,实际上我只是想知道是否有更优雅的方式。我不想在此时重构整个函数,因为它会导致所有的二次重构 async doSomething(stuff) { ... return functionThatReturnsPromise() .then((a) => ...) .then((b) => ...) .then((c) => { const user

我刚升级到节点8,想开始使用async/await。我遇到了一个错误,花了我一段时间才解决,实际上我只是想知道是否有更优雅的方式。我不想在此时重构整个函数,因为它会导致所有的二次重构

async doSomething(stuff) {
...

  return functionThatReturnsPromise()
    .then((a) => ...)
    .then((b) => ...)
    .then((c) => {
      const user = await someService.createUser(stuff, c);
      user.finishSetup();
    });
};

有没有一种方法可以在承诺链中使用
wait
,而不必将上面的所有内容重构为
async

回调函数不声明为
async
函数。您只能在
异步
函数中直接等待
承诺

async doSomething(stuff) {
// ...

  return functionThatReturnsPromise()
    .then((a) => /* ... */)
    .then((b) => /* ... */)
    .then(async (c) => {
      const user = await someService.createUser(stuff, c);
      return user;
    });
};
此外,如果您正在利用
async
函数,则不需要使用
then

async doSomething(stuff) {
// ...

  const a = await functionThatReturnsPromise();
  const b = // ...
  const c = // ...
  const user = await someService.createUser(stuff, c);
  return user;
};

那么(异步(c)=>{是否有效?这可能是我之前处理这个问题时错过的…我将整个链包装在一个异步IEFE中。谢谢!在这个简单的示例中,我不需要等待,但在我拥有的实际代码中,需要对用户做一些事情。是的,
wait
只能在
异步的函数中使用-异步函数中的函数不是异步函数,除非它本身被特别标记为异步函数:p我不明白的是,当整个函数都是
异步
函数时,为什么函数仍在使用承诺。是的,我现在明白了,这要感谢@Jaromanda X。我也明白,如果我转换为整个函数,就不会有什么问题了ion改为async/await,但这是应用程序的核心功能,我不想做得太多,因此我努力保留承诺链,只需添加我需要的新部分。如果我将整个功能改为async/await,你是什么意思?你可以从
asy内部
await
任何
promise
nc
函数。现在整个函数是一个很长的承诺链。我想避免转换每个“链接”在要调用的链中,等待
ed。调用的代码不需要重构,也不知道调用异步函数和返回承诺的常规函数之间的区别。根据规范,调用异步函数时,它返回承诺。@CodesLikeA\u Mokey我明白了,这是一个好的决定:)希望将来会有一些测试来减少像这样的主要重构的不确定性