私は非同期/待機機能を試しています。私はリクエストを模倣するそのようなコードを持っています:
_const getJSON = async () => {
const request = () => new Promise((resolve, reject) => (
setTimeout(() => resolve({ foo: 'bar'}), 2000)
));
const json = await request();
return json;
}
_
このようにコードを使用すると
_console.log(getJSON()); // returns Promise
_
それは約束を返します
しかし、このコード行を呼び出すと
_getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
_
期待どおりにjsonを出力します
console.log(getJSON())
のようなコードだけを使用することは可能ですか?何がわからないの?
すべてのasync
関数はPromise
オブジェクトを返します。 await
ステートメントはPromise
で動作し、Promise
resolve
sまたはreject
sまで待機します。
そのため、await
を使用しても、非同期関数の結果に対して_console.log
_を直接実行することはできません。 await
を使用すると、関数が待機し、すぐに解決されるPromise
が返されますが、Promise
のラップは解除されません。 Promise
関数または.then()
を使用して、async
関数によって返されたawait
をアンラップする必要があります。
_console.log
_ gingの代わりに.then()
を直接使用すると、.then()
メソッドはPromiseの結果を利用できるようにします。ただし、PromiseのoutsideからPromise
の結果を取得することはできません。これは、Promiseでの作業モデルの一部です。
非同期関数の戻り値 は常に AsyncFunctionオブジェクト になり、呼び出されるとPromise
を返します。その戻り値の型を変更することはできません。 async/await
のポイントは、非同期関数内で他の非同期プロセスが完了するのを簡単に待つことです。