web-dev-qa-db-fra.com

Utilisation de l'attente dans la chaîne de promesses

Je viens de passer au nœud 8 et je veux commencer à travailler avec async/wait. J'ai rencontré une erreur qui m'a pris du temps à résoudre et je me demandais en fait s'il y avait une manière plus gracieuse. Je ne voulais pas refactoriser l'ensemble de la fonction à ce stade dans le temps en raison de tous les refacteurs secondaires qu'elle entraînerait.

async doSomething(stuff) {
...

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

est-il possible d'utiliser await dans la chaîne de promesse sans avoir à refactoriser tout ce qui précède pour être async également?

14
jensengar

Le rappel n'est pas déclaré en tant que fonction async. Vous pouvez uniquement await a Promise directement à l'intérieur d'une fonction async.

async doSomething(stuff) {
// ...

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

De plus, vous ne devriez pas avoir besoin pour utiliser then si vous utilisez les fonctions async.

async doSomething(stuff) {
// ...

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