非同期関数から値を返すにはどうすればよいですか?私はこれを好きにしようとしました
const axios = require('axios');
async function getData() {
const data = await axios.get('https://jsonplaceholder.typicode.com/posts');
return data;
}
console.log(getData());
これが返ってくる
Promise { <pending> }
await
スコープの外にasync
を指定することはできません。期待される結果を得るには、console.log
を非同期IIFEにラップする必要があります。
async function getData() {
return await axios.get('https://jsonplaceholder.typicode.com/posts');
}
(async () => {
console.log(await getData())
})()
Worked
サンプル。
async/await
に関する詳細情報
axios
はpromiseを返すため、getData
関数のasync/await
は次のように省略できます。
function getData() {
return axios.get('https://jsonplaceholder.typicode.com/posts');
}
そして、前と同じようにします
(async () => {
console.log(await getData())
})()
関数getDataはPromiseを返します。
次のいずれかを実行できます。
await
関数も結果を取得します。ただし、await
を使用できるようにするには、async
関数を使用する必要があるため、これを「ラップ」する必要があります。
async function callAsync() {
var x = await getData();
console.log(x);
}
callAsync();
(わかりやすくするために関数に名前を付けましたが、このシナリオでは、匿名の関数呼び出しを使用したい場合があります。TheReasonの answer を参照してください。)
または
結果を通常のPromiseとして使用します。これは、非同期関数が返すものです。
コールバックでthen
を使用する必要があります。
getData().then(x => {
console.log(x);
}
他の答えはこの罰金をカバーしています。しかし、グローバルスコープで実行するのではなく、main
関数を作成して呼び出す習慣を身に付けて言いたいと思います。つまり.
async main(){
let result = await getData();
}
main().catch(console.log);
これは、コードを読んでいる人なら誰でも、これがあなたのアプリエントリポイントであることは明らかです。