Я пытаюсь выполнить вызов API с помощью async await, но он не работает и не выдает ошибок. Я пытаюсь вызвать getRace (), который возвращает обещание, поэтому я использую здесь ключевое слово await:

async function RaceInfo(){
     await getRace(raceID)
}

А затем я вызываю RaceInfo () и использую затем для обработки ответа:

RaceInfo().then(res=>{
        if(race.status === "in-progress") {
    renderAt('#leaderBoard', raceProgress(res.positions))
        }else if(race.status === "finished"){
    clearInterval(raceInterval) // to stop the interval from repeating
    renderAt('#race', resultsView(res.positions)) // to render the results view
    
        }

А затем все они должны быть сгруппированы внутри финального обещания для внешнего вызова:

function runRace(raceID) {
    return new Promise(resolve => {
    // TODO - use Javascript's built in setInterval method to get race info every 500ms
    
    async function RaceInfo(){
         await getRace(raceID)
    

    }
    RaceInfo().then(res=>{
        if(race.status === "in-progress") {
    renderAt('#leaderBoard', raceProgress(res.positions))
        }else if(race.status === "finished"){
    clearInterval(raceInterval) // to stop the interval from repeating
    renderAt('#race', resultsView(res.positions)) // to render the results view
    resolve(res)
        }

}).catch((err) => {
    console.log(err);
})
    const raceInterval=setInterval(RaceInfo, 500);
})

}

Консоль не возвращает ошибки, в чем может быть проблема?

0
maii 4 Май 2021 в 03:18

1 ответ

Лучший ответ

Вы ничего не возвращаете из RaceInfo, а race не определено в обратном вызове, переданном RaceInfo().then(...) ...

function getRace(raceID) {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve({status: "finished"}), 300);
  })
}

function runRace(raceID) {
    return new Promise(resolve => {
      // TODO - use Javascript's built in setInterval method to get race info every 500ms

      async function RaceInfo() {
          // Added return statement
          return await getRace(raceID);
      }

      RaceInfo().then(race => { // Changed paramter name 
          if(race.status === "in-progress") {
            console.log("race in progress");
            // renderAt('#leaderBoard', raceProgress(res.positions))
          } else if (race.status === "finished") {
            console.log("race in progress");
            // clearInterval(raceInterval) // to stop the interval from repeating
            // renderAt('#race', resultsView(res.positions)) // to render the results view
            // resolve(res)
          }
    }).catch((err) => {
      console.log(err);
    })

    const raceInterval=setInterval(RaceInfo, 500);
  });
}

runRace(7);
0
AJ_ 4 Май 2021 в 00:33