web-dev-qa-db-ja.com

promiseチェーンでawaitを使用する

ノード8にアップグレードしたばかりで、async/awaitの操作を開始したい。私は解決するのに時間がかかるエラーに出くわし、実際にはもっと優雅な方法があるかどうか疑問に思っていました。この時点で関数全体をリファクタリングしたくなかったのは、それがもたらすすべての二次的なリファクタリングのためでした。

async doSomething(stuff) {
...

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

上記のすべてをリファクタリングせずにawaitにすることなく、Promiseチェーンでasyncを使用できる方法はありますか?

14
jensengar

コールバックはasync関数として宣言されていません。 await関数の内部で直接できるのは、Promise a asyncのみです。

async doSomething(stuff) {
// ...

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

さらに、then関数を利用している場合、needを使用してasyncを使用しないでください。

async doSomething(stuff) {
// ...

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