3 votes

Quelle est la différence entre Promise((resolve,reject)=>{}) et Promise(resolve =>{}) ?

Comme nous le savons, le constructeur Promise prend une fonction exécuteur qui a deux paramètres que nous utilisons pour générer un cas de réussite ou d'échec. Aujourd'hui, j'étais en train de programmer et j'étais coincé, mais j'ai résolu le problème plus tard, mais j'ai trouvé une chose qui doit être comprise.

Quelle est la différence entre

new Promise(resolve => {

    // resolve

});

y

new Promise((resolve,reject)=>{

    // resolve
    // reject

});

On peut faire comme ça ?

new Promise(resolve => {

    // resolve

}, reject => {

    // reject

});

Des exemples seront plus appréciés. Merci ! !!

4voto

Xufox Points 3719

Ceci n'est pas spécifique aux Promesses, mais seulement aux fonctions de rappel.

new Promise((resolve) => {}); 1 crée une Promise dont le callback ne prend que l'élément resolve paramètre. Il n'est pas possible d'appeler la fonction de rejet qui serait autrement fournie. 2

new Promise((resolve, reject) => {}); crée une Promise dont le callback prend les deux paramètres, y compris celui du rejet.

Les deux exemples ci-dessus illustrent le fonctionnement des paramètres de position. Le premier paramètre de la fonction de rappel est toujours la fonction resolve, le second est toujours la fonction reject.

new Promise((reject, resolve) => {}); créera une Promesse dans laquelle vous pourrez résoudre avec reject et rejeter avec resolve .

Vous pourriez throw dans la portée de la fonction de rappel ou resolve(Promise.reject()) pour provoquer un rejet :

new Promise((resolve) => {
  throw new Error("42");
  // or `resolve(Promise.reject(new Error("42")));`
})
  .catch(console.warn); // Prints warning “Error: "42"” in the console.

Vous ne pouvez pas utiliser new Promise((resolve) => {}, (reject) => {}); puisque le Promise ne prend qu'un seul argument. La deuxième fonction de rappel sera simplement ignorée.


1 : (resolve) => {} est, bien sûr, équivalent à resolve => {} . Mais les paramètres de la fonction flèche sont en fait toujours nécessitent des parenthèses. Les paramètres simples et uniques sont les seule exception où ils peuvent être omis. Voir le Article MDN sur la syntaxe de la fonction flèche .

2 : Utilisation d'une fonction régulière, new Promise(function(resolve){}); o new Promise(function(){}); vous pourriez accéder à n'importe quel argument con arguments[0] ( résoudre ) ou arguments[1] ( rejeter ).

2voto

TLP Points 708

Vous pouvez omettre reject si vous savez avec certitude que la promesse ne peut jamais échouer, par exemple une minuterie. Tout ce qui nécessite un gestionnaire d'erreurs (requêtes http, entrées/sorties de fichiers, etc.) aura besoin d'une fonction reject le rappel.

0voto

justMe Points 513

La fonction flèche que vous passez est le callback déclenché lorsque l'opération async se termine. Elle accepte 2 arguments, la fonction à appeler en cas de succès (resolve) et la fonction à appeler en cas d'échec (reject).

En JS, il n'est pas nécessaire de passer tous les paramètres à la fonction callback. Si vous ne prévoyez pas de gérer les erreurs (vous devriez le faire !), vous pouvez l'omettre.

Si vous passez 1 paramètre, il est considéré comme un fn de résolution.

0voto

Koushik Chatterjee Points 2702

Eh bien, oubliez les promesses, si une fonction ayant un argument est appelée avec deux arguments, il n'y a pas de problème comme par la norme JavaScript (et vice versa).

Maintenant, en ce qui concerne votre promesse, le callback que vous passez à votre constructeur sera appelé par 2 arguments (la fonction de résolution et le rejet). Si vous créez une fonction ayant 1 argument et que vous la passez au constructeur de la promesse, elle sera simplement appelée par 2 arguments, puisque vous n'avez pas de référence au second argument, vous ne pouvez pas l'utiliser de la manière dont il est censé être utilisé (comme une déclaration générique et non pour la promesse).

Vous pouvez toujours essayer d'utiliser arguments si vous avez toujours besoin du deuxième argument mais, avec arrow fonction que vous n'obtiendrez pas non plus. Dans ce cas, il est préférable d'utiliser la fonction normale function () {} . Sinon, vous pouvez essayer de retourner une autre promesse explicitement avec Promise.resolve o Promise.reject

Et certainement la dernière avec plusieurs callback comme arguments au constructeur de Promise ne va pas fonctionner, car ils sont conçus comme ayant un callback avec 2 paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X