Quelle est la différence entre JavaScript promesses et async attendent?
J'ai été en utilisant ECMAScript 6 et ECMAScript 7 dispose déjà (grâce à Babel) dans mes applications mobiles et web.
La première étape était évidemment à ECMAScript 6 niveaux. J'ai appris beaucoup de async modèles, les promesses (qui sont vraiment prometteurs), des générateurs (je ne sais pas pourquoi le symbole*), etc.
En dehors de ces, des promesses adapté mon but assez bien. Et j'ai été de les utiliser dans mes applications beaucoup.
Voici un exemple de/pseudocode de la façon dont j'ai mis en place une base promesse-
var myPromise = new Promise(
function (resolve,reject) {
var x = MyDataStore(myObj);
resolve(x);
});
myPromise.then(
function (x) {
init(x);
});
Comme le temps a passé, je suis tombé sur ECMAScript 7 fonctions, et l'un d'eux étant ASYNC
et AWAIT
mots-clés/fonctions. En collaboration faire de grandes merveilles. J'ai commencé à remplacer certains de mes promesses avec async & await
. Ils semblent ajouter une grande valeur pour le style de programmation.
Encore, voici un pseudo-code de la façon dont ma async, attendent fonction ressemble-
async function myAsyncFunction (myObj) {
var x = new MyDataStore(myObj);
return await x.init();
}
var returnVal = await myAsyncFunction(obj);
En gardant les erreurs de syntaxe (le cas échéant) de côté, tous les deux de faire exactement la même chose, c'est ce que je ressens. J'ai presque réussi à remplacer la plupart de mes promesses avec async,vous attend.
Pourquoi est asynchrone,attendent nécessaire lorsque promet de faire un travail similaire?
Ne async,attendent résoudre un problème plus grave? Ou était-ce juste une autre solution pour rappel l'enfer?
Comme je l'ai dit précédemment, je suis en mesure d'utiliser des promesses et asynchrone,vous attendent afin de résoudre le même problème. Est-il quelque chose de spécifique qui async attendent-ils résolus?
Remarques supplémentaires:
J'ai été en utilisant async,attend et promesses dans ma Réagir projets et Node.js les modules de manière intensive.
Réagir, en particulier, ont été un lève-tôt et adopté beaucoup de ECMAScript 6 et ECMAScript 7 caractéristiques.
- Votre premier bloc de code s'affiche à utiliser une promesse pour un fonctionnement synchrone. Pourquoi voudriez-vous faire cela? Synchrone est, par nature, plus facile d'écrire du code pour il devrait donc y avoir peu de raisons pour envelopper un fonctionnement synchrone dans la promesse et le forcer à maintenant être asynchrone.
- Oui, vous avez raison. Modifié le code. Merci.
- Votre toujours essayer d'utiliser asynchrone outils synchrone fonctions - maintenant, dans les deux blocs de code. Pourquoi?
- Ok. Ici, j'ai mon code gist.github.com/bozzmob/26d38b83dc37d1be37f5 . S'il vous plaît pouvez-vous me dire ce que je fais mal?
- Où est une opération asynchrone dans votre code qui est à l'origine vous d'utiliser autre chose qu'un code synchrone?
- S'il vous plaît pouvez-vous me donner le pseudo-code, afin que je puisse savoir ce que je fais de mal. Opération asynchrone sens?
- Il semble que vous juste besoin de faire un tas de lecture pour comprendre ce async et await sont pour. Voici quelques articles: Le long de la route Async/Await en JavaScript et Simplifier Asynchrone de Codage avec ES7 Async Fonctions et Apprivoiser la asynchrones bête avec ES7.
Vous devez vous connecter pour publier un commentaire.
async/await
simplement vous donne un synchrones sensation de code asynchrone. Il est très élégante, une forme de sucre syntaxique.Pour les requêtes simples et de manipulation de données, des Promesses peut être simple, mais si vous exécutez en est-il des scénarios complexes de manipulation de données et autres joyeusetés, il est plus facile de comprendre ce qu'il se passe si le code semble comme si elle synchrone (pour le dire d'une autre façon, de syntaxe et de lui-même est une forme de "accessoires de la complexité" qui
async/await
pouvez vous déplacer).Si vous êtes intéressé à savoir, vous pouvez utiliser une bibliothèque comme
co
(à côté de générateurs) pour donner le même genre de sensation. Les choses de ce genre ont été mis au point pour résoudre le problème queasync/await
en fin de compte résout (nativement).Async/Await fournir un beaucoup plus agréable de syntaxe dans des scénarios plus complexes. En particulier, tout ce qui a trait à boucles ou de certains autres éléments, comme les
try
/catch
.Par exemple:
Cet exemple serait considérablement plus complexes, juste à l'aide de Promesses.
const getValue = value => value || operation1().then(operation2).then(getValue);
La première chose que vous devez comprendre que
async
/await
syntaxe est juste sucre syntaxique qui est destiné à augmenter promesses. En fait, la valeur de retour d'uneasync
fonction est une promesse.async
/await
syntaxe nous donne la possibilité de l'écriture asynchrone en mode synchrone. Voici un exemple:Promesse chaîne:
Async
fonction:Dans l'exemple ci-dessus le
await
attend la promesse (fetch(url)
) d'être résolue ou rejeté. Si la promesse est résolu valeur est stockée dans laresponse
variable, si la promesse est rejetée, il lancerait une erreur et ainsi entrer dans lecatch
bloc.Nous pouvons déjà voir que l'utilisation de
async
/await
peut être plus lisible que la promesse de chaînage. Cela est particulièrement vrai lorsque le montant des promesses dont nous sommes l'aide augmente. À la fois Promesse de chaînage etasync
/await
résoudre le problème de rappel de l'enfer et de la méthode que vous choisissez est question de préférence personnelle.Async/await peut aider à rendre votre code plus propre et plus lisible dans le cas où vous avez besoin compliqué de flux de contrôle. Il a également produit plus de déboguer le code est adapté. Et de fait il est possible de gérer à la fois synchrone et asynchrone des erreurs avec juste
try/catch
.Récemment, j'ai écrit ce post montrant les avantages de async/await plus de promesses dans certains cas d'utilisation courants avec des exemples de code https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9
Comparaison avec des avantages et des inconvénients.
Plaine JavaScript
Async (bibliothèque)
Promesses
Générateurs
Async attendent
les deux sont les moyens de gérer async code. Mais il y a une différence entre l'exécution de chaque. Voici le travail d'exécution -
Promesse
La Promesse objet représente l'achèvement possible (ou l'échec) d'une opération asynchrone et sa valeur qui en résulte. C'est un proxy pour une valeur pas nécessairement connue au moment de sa création, et il représente l'avenir de la suite d'une opération asynchrone.
Le code appelant peut attendre jusqu'à ce que se réalise la promesse de avant l'exécution de l'étape suivante. Pour ce faire, la promesse a une méthode nommée
then
, qui accepte une fonction qui sera appelée lorsque la promesse a été accomplie.Async/await
Lorsqu'un
async
fonction est appelée, elle retourne unPromise
. Lorsque leasync
fonction renvoie une valeur, laPromise
sera résolu avec la valeur retournée. Lorsque leasync
fonction déclenche une exception ou d'une certaine valeur, la Promesse sera rejeté avec la valeur renvoyée.Une fonction async peut contenir une expression await, qui suspend l'exécution de la fonction async et attend la Promesse de la résolution, et reprend ensuite l'asynchrone en fonction de l'exécution et retourne la valeur résolue
la poursuite de la sémantique des opérations asynchrones.