Explication populaire qu'est-ce que la promesse

Qu'est-ce que la promesse?

Promise traduction anglaise signifie promesse, promesse. Sa fonction est comme le sens chinois, c'est une promesse.

Explication de MDN: L'
objet Promise est un objet proxy (proxy une valeur), et la valeur de l'objet proxy peut être inconnue lorsque l'objet Promise est créé. Il vous permet de lier les méthodes de traitement correspondantes (gestionnaires) pour le succès et l'échec des opérations asynchrones. Cela permet aux méthodes asynchrones de renvoyer des valeurs telles que les méthodes synchrones, mais au lieu de renvoyer immédiatement le résultat final de l'exécution, c'est un objet de promesse qui peut représenter des résultats futurs.

Cela dit, cela se traduit en fait par une langue vernaculaire:
1. La belle-fille a faim et a besoin de manger, alors je veux aller dans la rue pour acheter de la nourriture ( méthode asynchrone )
2. Elle ne sait pas quand Je reviendrai après avoir acheté la nourriture (la méthode asynchrone s'exécutera pendant quelques secondes ),
3. Mais après avoir acheté la nourriture et rentrer à la maison, je ferai des côtes de porc braisées pour ma belle-fille à manger ( après le méthode asynchrone est exécutée, la valeur de retour doit être traitée ).
Que dois-je faire à ce moment, je vais utiliser une promesse: il suffit de
dire cette chose Donne-la moi, je promets que je vais aller faire du shopping, je vais vous faire braiser côtes de porc dès que j'aurai fini de l'acheter, et je vous appellerai pour la manger dès que c'est fait (cet endroit équivaut à un appel en chaîne de promesse ), que faites-vous maintenant? Vous pouvez jouer à des jeux avec Douyin ( est-ce n'affecte pas l'appel des autres codes ).

Une promesse a les états suivants: en
attente: état initial, état ni succès ni échec (je suis sorti pour acheter de la nourriture, vous attendez que je revienne)
rempli: signifie que l'opération est terminée avec succès. (Après avoir acheté la nourriture, rentrez chez vous et dites à ma belle-fille que j'ai la nourriture que vous voulez manger)
rejeté: Cela signifie que l'opération a échoué. (Je n'ai pas reçu de nourriture, pourquoi ne commandez-vous pas de plats à emporter)

Un objet Promise dans l'état en attente peut passer à un état rempli et transmettre une valeur à la méthode de traitement d'état correspondante, ou il peut passer à un état d'échec (rejeté) et transmettre des informations d'échec. Lorsque l'une de ces situations se produit, les gestionnaires liés à la méthode then de l'objet Promise seront appelés.
La méthode then contient deux paramètres: onfulfilled et onrejected, tous deux de type Function. Lorsque l'état Promise est rempli, la méthode onfulfilled de then est appelée, et lorsque l'état Promise est rejeté, la méthode onrejected de then est appelée, il n'y a donc pas de concurrence entre l'achèvement de l'opération asynchrone et la méthode de traitement de liaison).
Insérez la description de l'image ici

Regardez un exemple de base:

            new Promise((resolve, reject) => {
                console.log('code begin !');
                 let num = 4;
                // 假装执行一个异步方法
                setTimeout(() => {
                    console.log('async begin !');
                    num += 2;
                    // 把Promise状态设为fulfilled,并把结果传递出去
                    resolve(num);
                    // 把Promise状态设为rejected,并把失败信息传递出去
                    //reject('promise被手动中止');
                    // throw 'uncaught exception!'; // 这里要注意,catch无法捕获在异步方法里抛出的异常
                }, 1000);
            }).then((result) => { // 当Promise的状态被设为接受(fulfilled)时执行
                console.log('fulfilled :' + result);
            }, (reason) => { // 当Promise的状态被设为拒绝(rejected)时执行
                console.log('rejected :' + reason);
            }).catch((error) => { 
                console.log('error :' + error);
            }).finally(() => {
                // do something !
            });
                

La méthode then renvoie une promesse. Il nécessite au plus deux paramètres: la fonction de rappel pour le succès et l'échec de la promesse.

La méthode catch est exécutée lorsqu'une exception se produit dans le processus d'exécution, ou le statut de la promesse est défini sur échoué (rejeté) et la fonction d'exécution rejetée n'est pas définie. De plus, catch ne peut pas intercepter les exceptions levées dans les méthodes asynchrones

La méthode finally ne peut pas connaître l'état final de la promesse, donc la fonction de callback finally ne reçoit aucun paramètre, elle n'est utilisée qu'en cas d'exécution quel que soit le résultat final.

De plus, les Promises peuvent être appelées dans une chaîne. Si l'exécution de la méthode then se termine et qu'une nouvelle Promise est renvoyée, les méthodes then seront exécutées en séquence. Mais voici une chose à noter: si une exception se produit dans la chaîne d'appels ou si le statut passe à rejeté, le reste de la chaîne d'appels ne sera pas exécuté. Soyez donc prudent lorsque vous utilisez des appels en chaîne!

Exemple de code:

            new Promise((resolve, reject) => {
                console.log('code begin !');
                let num = 4;
                setTimeout(() => {
                    console.log('num + 2 = 6');
                    num += 2;
                    resolve(num);
                }, 1000);
            }).then((num) => {
                return new Promise((resolve, reject) => {
                    console.log('num * num = 36');
                    setTimeout(() => {
                        num *= num;
                        resolve(num);
                    }, 1000);
                });
            }).then((num) => {
                return new Promise((resolve, reject) => {
                    console.log('num + num = 72');
                    setTimeout(() => {
                        num += num;
                        resolve(num);
                    }, 1000);
                });
            }).then((result) => {
                console.log('fulfilled :' + result);
            }, (reason) => {
                console.log('rejected :' + reason);
            }).catch((error) => {
                console.log('error :' + error);
            }).finally(() => {
                // do something !
            });

Insérez la description de l'image ici
Promesse a d'autres méthodes telles que Promise.all ( itérables ): vous pouvez passer un itérable (similaire à un tableau) en elle, il va attendre que toutes les promesses dans le itérables à exécuter et revenir de façon uniforme le résultat retourné est également. un tableau, qui suivra L'ordre des promesses dans les paramètres n'est pas déterminé par l'ordre dans lequel les promesses sont appelées.

	    Promise.all([mothod1(), mothod2()])
	         .then((result) => {
	             console.log('all complete');
	             console.log(result);
	         });
                
       function mothod1() {
            console.log('first mothod');
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('mothod1 complete');
                }, 2000);
            });
        }
        function mothod2() {
            console.log('second mothod');
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve('mothod2 complete');
                }, 1000);
            });
        }

Insérez la description de l'image ici

Promise.race ( itérables ): Vous pouvez passer un itérable (similaire à un tableau) en une fois une promesse dans le itérables est résolu ou rejeté, la promesse sera résolu ou rejetée..

			Promise.race([mothod1(), mothod2()])
                .then((result) => {
                    console.log(result);
                    console.log('complete');
                });

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_41885871/article/details/103735447
conseillé
Classement