web-dev-qa-db-fra.com

Résoudre les promesses de ES6 Arrow Functions

En lisant la documentation telle que je la comprends dans ES6, on entend par:

foo => someFun(foo); 

est équivalent à:

foo => { return someFun(foo); }

Je retourne une nouvelle promesse et, dans ce code, j'utilise des fonctions de flèche pour appeler les méthodes de résolution et de rejet, par exemple.

return new Promise(function(resolve, reject)
{
    someFunThatReturnsAPromise()
    .then(data => resolve(data))
    .catch(err => reject(err));
});

En tant que tel est le code dans le moment,

.then(data => return resolve(data))

Si tel est le cas, le résultat de la résolution (dont je ne suis pas sûr du type de valeur) est-il important et devrais-je être un peu moins concis et l'écrire en utilisant {} pour éviter le retour implicite

.then(data => { resolve(data); })
4
const

La fonction resolve renvoie déjà undefined; elle ne fait donc absolument aucune différence si vous la retournez implicitement avec une fonction de flèche d'une ligne ou si vous ne la renvoyez pas du tout d'un corps de fonction (puisque ce dernier signifie que votre corps de fonction retourne implicitement undefined lui-même) . 

De plus, puisque vous avez intégré la promesse retournée par someFunThatReturnsAPromise() dans une nouvelle promesse, de toute façon, rien ne gère le retour, de sorte que cela ne ferait aucune différence, même si vous retourniez quelque chose.

Plus important encore, la manière dont vous avez intégré une promesse à une nouvelle promesse est un anti-modèle. La construction new Promise() concerne uniquement les processus asynchrones qui ne sont pas déjà basés sur des promesses.
Étant donné que someFunThatReturnsAPromise() renvoie déjà une promesse, vous n'avez pas besoin de l'envelopper dans une nouvelle, utilisez simplement celle que vous avez obtenue!
Pour votre exemple, cela signifierait simplement le renvoyer:

return someFunThatReturnsAPromise()

Si vous souhaitez effectuer un traitement des données, tel que renvoyer uniquement une partie des données (la propriété status dans l'exemple ci-dessous), vous le faites dans un rappel then:

return someFunThatReturnsAPromise().then(data => data.status)

Lorsque vous revenez dans un callback then, il retournera une nouvelle promesse qui sera résolue avec les données que vous avez renvoyées (à moins que vous ne renvoyiez une autre promesse, auquel cas elle sera résolue lorsque cette promesse sera résolue).
C’est ainsi que les promesses sont conçues pour fonctionner, en enchaînant les processus asynchrones et leurs résultats.

4
Lennholm

Si vous voulez seulement renvoyer des données et rejeter en cas d'erreur, vous n'avez pas besoin de then ()

return new Promise(function(resolve, reject)
{
    someFunThatReturnsAPromise()
    .then(data => resolve(data))
    .catch(err => reject(err));
});

serait équivalent à 

return someFunThatReturnsAPromise()

sauf si vous voulez faire un traitement sur les données

0
marvel308