web-dev-qa-db-ja.com

待機中の値を返すと、Promiseが返されますか? (es7 async / await)

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

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

console.log( wrapper() );

ログPromise { <pending> }; 'somestring'ではなくPromiseを返すのはなぜですか?

これをコンパイルするためにBabel ES7プリセットを使用しています。

14
bool3max

非同期関数はpromiseを返します。あなたが望むことをするために、このようなことを試してください

_wrapper().then(someString => console.log(someString));
_

別の非同期関数のコンテキストからの他のpromiseのようにwrapper()を待つこともできます。

_console.log(await wrapper());
_
19
afuous

非同期関数がすぐに値を返すようにする場合は、Promise.resolve(theValue)を使用できます。

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

    return Promise.resolve(somevalue)
}

IMO async awaitキーワードにはもう1つ必要です。解決してください

return resolve 'hello'と書いておくといいでしょう

あるいは単に

resolve 'hello'
2