web-dev-qa-db-fra.com

Est-il possible d'utiliser wait sans async dans Js

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!

12
曾志强

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.

13
Pointy