web-dev-qa-db-ja.com

変数に非同期/待機応答を保存する

私は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> }
11
Jonca33
    1. asyncExample関数から何かを返す

      const asyncExample = async () => {
      return await axios(users)
      };
      
    1. その関数を呼び出して、返されたPromiseを処理します。

      asyncExample().then(users => {
      console.log(users)
      })
      .catch(err => console.error(err))
      

このように処理する必要がある理由は次のとおりです。

  • トップレベルのawaitは実行できません(ただし、 提案 があります)-awaitasync関数内に存在する必要があります。

  • 関数をasyncとしてマークすると、Promiseが返されます。上記のように、Promiseをトップレベルでうまく処理できます。

18
Nik Kyriakides

try..catchは、新しいブロックスコープを作成します。 letを使用して、dataの代わりにtry..catchの前にconstを定義し、return関数のdataasyncExampleを使用します。コール

(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;
})();
0
guest271314