Возвращаемое значение из асинхронного вызова в модуле узла - PullRequest
0 голосов
/ 07 сентября 2018

Я работаю над приложением vue и написал модуль, который использует axios для вызова mySportsFeed.com для получения данных. Моя проблема в том, что из-за асинхронной природы axios я получаю обещание, а не данные. Я пробовал несколько разных способов решить эту проблему безрезультатно. Я надеюсь, что кто-то сможет указать на мою ошибку. Код:

vue.js

//====== Get Standings From MySportsFeeds Site ======================================== //
  url = `https://api.mysportsfeeds.com/v1.2/pull/mlb/2018-regular/division_team_standings.json?teamstats=W,L,GB,Win %`;

  mySportsFeeds.feedsData(url)
    .then(function(response) {
      this.standings = response;
      console.log(`Standings is : ${this.standings}`);
  });

  // ======= end Standings ================================================ //

mySportsFeeds.js:

    module.exports = {
  /* jshint ignore:start */
  feedsData: async function(url) {
    url = encodeURI(url); // Format the URI

    return (await axios.get(url, config)).data.divisionteamstandings.division;
  }

И вывод консоли:

Array (6) [{…}, {…}, {…}, {…}, {…}, {…}] mySportsFeeds.js: 29

Стандарты: [объект объекта], [объект объекта], [объект объекта], [объект объекта], [объект объекта], [объект объекта] vue.js: 106

И на панели vue показано: турнирная таблица: массив [0]

Console Output

Как вы видите this.standings не определено? Любое руководство высоко ценится ...

Обновлен рабочий код: vue.js:

 //====== Get Standings From MySportsFeeds Site =========================== //
      url = `https://api.mysportsfeeds.com/v1.2/pull/mlb/2018-regular/division_team_standings.json?teamstats=W,L,GB,Win %`;

      /* jshint ignore:start */
      // Note: We use the arrow function here because "this" is defined by where
      // getStandings() is called (the vue instance) not by where it is used.
      let getStandings = async () => {
        this.standings = await mySportsFeeds.feedsData(url);
      };
      /* jshint ignore:end */

      getStandings();

mySportsFeeds.js:

module.exports = {
  /* jshint ignore:start */
  feedsData: async function(url) {
    url = encodeURI(url); // Format the URI

    return (await axios.get(url, config)).data.divisionteamstandings.division;
  }
  /* jshint ignore:end */
};
...