web-dev-qa-db-fra.com

Renvoyer une valeur attendue renvoie une promesse? (es7 async / attente)

const ret = () => new Promise(resolve => setTimeout( () => resolve('somestring'), 1000));

async function wrapper() {
    let someString = await ret();
    return someString;
}

console.log( wrapper() );

Il enregistre Promise { <pending> }; Pourquoi renvoie-t-il une promesse au lieu de 'somestring'?

J'utilise le préréglage Babel ES7 pour compiler cela.

14
bool3max

Les fonctions asynchrones renvoient des promesses. Pour faire ce que vous voulez, essayez quelque chose comme ça

wrapper().then(someString => console.log(someString));

Vous pouvez également attendre sur wrapper() comme d'autres promesses dans le contexte d'une autre fonction asynchrone.

console.log(await wrapper());
19
afuous

si vous voulez que votre fonction asynchrone retourne une valeur immédiatement, vous pouvez utiliser Promise.resolve (theValue)

async waitForSomething() {
    const somevalue = await waitForSomethingElse()
    console.log(somevalue)

    return Promise.resolve(somevalue)
}

OMI l'async attend les mots-clés ont besoin d'un de plus, résolvez

ce serait bien d'écrire retour résoudre "bonjour"

ou juste

resolve 'hello'
2
Martijn Scheffer