Maison >interface Web >js tutoriel >Ce n'est pas si difficile ! Pour comprendre « Promesse » en javascript
Le contenu de cet article est très adapté aux débutants en Javascript. Il sera décrit dans un langage simple et facile à comprendre, vous n'aurez donc pas à craindre de ne pas le comprendre.
La promesse est un point de connaissance indispensable lors de l'apprentissage du langage Javascript moderne. Beaucoup de gens se sentent confus en le lisant. La raison principale peut être résumée en une phrase :
Le code n'est plus exécuté de haut en bas.
Normalement, le code que nous écrivons est exécuté séquentiellement, par exemple, nous écrivons un code qui compte de 1 à 3.
console.log(1) console.log(2) console.log(3)
Appuyez sur F12 pour ouvrir la console de notre navigateur, copiez-y le code ci-dessus, appuyez sur Entrée, et vous pourrez voir que les chiffres 1 à 3 sont imprimés dans l'ordre.
1 2 3
Maintenant, si nous avons pour exigence que l'ordre des codes ne puisse pas être modifié, mais que l'ordre des impressions finales doit être indépendant de l'ordre des codes, pouvons-nous le faire ?
Imaginons que si 1, 2 et 3 sont imprimés respectivement par trois personnes, alors ce sera très simple. Il suffit de leur indiquer la tâche d'imprimer les numéros en même temps, et l'ordre des impressions ne sera lié qu'au temps d'exécution des tâches.
Alors, comment assigner la tâche d'impression à trois personnes ? C'est là qu'est utilisée la Promesse. En créant un nouvel objet Promise, nous pouvons attribuer une section de code à un nouveau « processus » au lieu de l'exécuter sur le « processus » actuel. Notez que le « processus » ici n'est pas le même que le processus du système d'exploitation dont nous parlons souvent, mais n'est qu'un concept abstrait, représentant une unité virtuelle qui exécute du code en séquence.
Comme nous l'avons dit tout à l'heure, Promise peut être considéré comme un nouveau "processus", donc si nous voulons qu'il exécute n'importe quel code, nous pouvons l'envelopper dans une fonction et le lui donner. De cette façon, le code ne sera pas exécuté immédiatement.
Promise nous fournit également deux fonctions, l'une est la résolution et l'autre est le rejet, que nous pouvons appeler lorsque la tâche est terminée et a échoué respectivement. Ces deux fonctions sont transmises aux paramètres internes de Promise. Ainsi, nous pouvons en assembler un comme ceci :
Promise( (resolve, _reject) => { setTimeout(() => { console.log(1) resolve() }, 300) } )
Ici, nous utilisons setTimeout pour simuler une tâche chronophage. Dans des scénarios réels, cette tâche peut consister à lire un fichier, à demander une interface réseau ou à attendre une entrée de l'utilisateur. Lorsque la tâche est terminée, nous appelons la fonction solve pour indiquer que la tâche est terminée.
Ensuite, nous suivons la même méthode, et Promis lorsque nous assemblerons les deux autres, il nous suffira de leur fournir des numéros d'impression différents et le temps nécessaire à la tâche. Enfin, le code complet est comme ceci, vous pouvez essayer de le copier dans la console et l'essayer.
Promise( (resolve, _reject) => { setTimeout(() => { console.log(1) resolve() }, 300) } ) new Promise( (resolve, _reject) => { setTimeout(() => { console.log(2) resolve() }, 200) } ) new Promise( (resolve, _reject) => { setTimeout(() => { console.log(3) resolve() }, 100) } )
Enfin, l'ordre dans lequel les numéros sont imprimés est lié au temps d'exécution des tâches :
3 2 1
La programmation simultanée consiste à simuler l'exécution d'un grand nombre de tâches simultanément sur un nombre limité de cœurs de processeur. Promise en Javascript fournit un moyen pratique et rapide de programmation simultanée, ainsi qu'un ensemble de spécifications pour gérer les valeurs de retour et les valeurs d'erreur. Après avoir compris et pris connaissance de cette spécification, nous pouvons considérablement améliorer l'efficacité de la gestion des tâches simultanées.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!