私はasync/awaitとtry/catchを使用して非同期呼び出しを理解しようとしています。
以下の例では、残りのコード全体で利用できる変数への成功した応答を保存するにはどうすればよいですか?
const axios = require('axios');
const users = 'http://localhost:3000/users';
const asyncExample = async () =>{
try {
const data = await axios(users);
console.log(data); //200
}
catch (err) {
console.log(err);
}
};
//Save response on a variable
const globalData = asyncExample();
console.log(globalData) //Promise { <pending> }
asyncExample
関数から何かを返す
const asyncExample = async () => {
return await axios(users)
};
その関数を呼び出して、返されたPromise
を処理します。
asyncExample().then(users => {
console.log(users)
})
.catch(err => console.error(err))
このように処理する必要がある理由は次のとおりです。
トップレベルのawait
は実行できません(ただし、 提案 があります)-await
はasync
関数内に存在する必要があります。
関数をasync
としてマークすると、Promise
が返されます。上記のように、Promise
をトップレベルでうまく処理できます。
try..catch
は、新しいブロックスコープを作成します。 let
を使用して、data
の代わりにtry..catch
の前にconst
を定義し、return
関数のdata
asyncExample
を使用します。コール
(async() => {
const users = 123;
const asyncExample = async() => {
let data;
try {
data = await Promise.resolve(users);
} catch (err) {
console.log(err);
}
return data;
};
//Save response on a variable
const globalData = await asyncExample();
console.log(globalData);
// return globalData;
})();