Attendre est une fonctionnalité étonnante dans es7.
Cependant, à chaque fois que j'attends, je trouve que je dois définir une fonction asynchrone et appeler cette fonction.
Tel que
async function asy(){
const [resCityGuess,resCityHot,resCityAll]=await Promise.all([
this.http.get('api/v1/cities?type=guess'),
this.http.get('api/v1/cities?type=hot'),
this.http.get('api/v1/cities?type=group')
])
this.cityGuessName=resCityGuess.data.name;
this.cityGuessId=resCityGuess.data.id;
this.cityHot=resCityHot.data;
this.cityAll=resCityAll.data;
}
asy.apply(this);
Ce que je veux, c'est utiliser attendre sans fonction asynchrone comme
// the async function definition is deleted
const [resCityGuess,resCityHot,resCityAll]=await Promise.all([
this.http.get('api/v1/cities?type=guess'),
this.http.get('api/v1/cities?type=hot'),
this.http.get('api/v1/cities?type=group')
])
this.cityGuessName=resCityGuess.data.name;
this.cityGuessId=resCityGuess.data.id;
this.cityHot=resCityHot.data;
this.cityAll=resCityAll.data;
// without call fn
Je pense que définir la fonction fn et appeler cette fn se répète parfois donc je veux savoir s'il est possible d'optimiser la situation?
Puis-je utiliser wait sans async?
Merci beaucoup!
Non. L'opérateur await
n'a de sens que dans une fonction async
.
éditez - pour élaborer: l'ensemble async
et await
deal peut être considéré comme étant comme une macro LISP. Ce que cette syntaxe fait, c'est informer le système d'interprétation du langage de ce qui se passe, afin qu'il puisse en effet synthétiser une transformation du code environnant en une promesse- séquence basée sur les demandes de rappel.
Ainsi, l'utilisation de la syntaxe est un raccourci implicite pour coder le contenu explicite de Promise, avec des appels à .then()
etc. Le runtime doit savoir qu'une fonction est async
parce qu'alors il sait que async
les expressions à l'intérieur de la fonction doivent être transformées pour renvoyer Promises via un mécanisme générateur. Et, pour des raisons de chevauchement, la décoration async
sur la déclaration de fonction indique au langage que c'est vraiment une fonction qui retourne une promesse et qu'elle doit y faire face.
C'est donc compliqué. Le processus d'amélioration et d'extension de JavaScript doit tenir compte du fait qu'il existe une quantité incroyablement massive de code JavaScript dans le monde, et donc dans presque tous les cas, aucune nouvelle fonctionnalité ne peut entraîner l'échec d'une page intacte depuis 2002.