Pourquoi dans le code qui coule dans la première fonction de flèche, nous obtenons la valeur de résolution de promesse some data sous forme de chaîne, mais dans la seconde, nous obtenons Promise { 'some data' } ?

const resolveAfter2Seconds = ()=> {
         return new Promise(resolve => {
            setTimeout(function() {
                resolve("some data");
            }, 2000);}
        );
    };

    (async()=>{
        let prom=await resolveAfter2Seconds()
        console.log(prom)
    })();



    (async()=>{
        let prom=resolveAfter2Seconds()
        await prom
        console.log(prom)
    })();
1
ogbofjnr 13 mars 2019 à 18:15

2 réponses

Meilleure réponse

Étant donné que await prom ne modifie pas ce à quoi la variable prom fait référence, il attend simplement que la promesse à laquelle elle fait référence s'établisse. prom fait toujours référence à une promesse lorsque vous l'enregistrez. Si vous souhaitez mettre à jour prom avec le résultat de la promesse, vous devez le faire explicitement :

prom = await prom;
6
T.J. Crowder 13 mars 2019 à 15:19

Si vous exécutez simplement resolveAfter2Seconds(), cette fonction en elle-même renvoie un Promise. Donc prom = resolveAfter2Seconds(); aura toujours la promesse comme valeur de la variable. Lorsque vous écrivez await devant resolveAfter2Seconds(), vous dites à JS d'attendre que la promesse renvoyée par la fonction soit résolue avant que la variable ne soit définie, puis la valeur renvoyée de la promesse est transmise au variable

0
mufasa 13 mars 2019 à 15:25