Журнал асинхронной консоли работает, но res => {return res} не работает - PullRequest
0 голосов
/ 29 октября 2019

Я пытался прочитать о том, как работает асинхронность и каковы обещания, но все еще не понимаю концепцию должным образом.

Я понимаю, что асинхронная функция возвращает обещание, но в то же время она может возвращать содержимое из API в моем случае.

let username = list_scores[i].score.username;

      ///Await Hiscores fetches json from api.
      ///Hiscores connects to third party api and fetches data dependant on (name)

      async function getUserAsync() {
        async function getHS (name) {
          var response = await Hiscores.fetch(name).catch(console.error)
          var result = JSON.stringify(response);
          // var resultparse = JSON.parse(result)
          return result;
        }
       return getHS(username).then(result => JSON.parse(result)).catch(console.error);
      }

      let hs = getUserAsync().then(console.log)

В приведенном выше примере отображается json, извлеченный в ответе varв консоли, как и предполагалось, но когда я изменяю его, чтобы попытаться заставить его вернуть тот же журнал, что и переменная

      let hs = getUserAsync().then(res => {return res;}).catch(console.error)
      console.log(hs)

Возвращает

Promise { <pending> }

Вид убытка здесь, былпогуглил уже несколько дней ....

1 Ответ

0 голосов
/ 29 октября 2019

так что hs - невыполненное обещание. если бы вы были в функции async, вы могли бы await получить ответ от getUserAsync(), но это не похоже на вас;следовательно, вы должны обращаться с этим по-старомодному способу Promise

let username = list_scores[i].score.username;
getUserAsync(username).then(user => {
    //handle user
})

///Await Hiscores fetches json from api.
///Hiscores connects to third party api and fetches data dependant on (name)

async function getHS(name) {
    var response = await Hiscores.fetch(name).catch(console.error)
    var result = JSON.stringify(response);
    // var resultparse = JSON.parse(result)
    return result;
}

async function getUserAsync(username) {
    return getHS(username).then(result => JSON.parse(result)).catch(console.error);
}
...