【问题标题】:async await is not working and console not returning an error异步等待不工作,控制台不返回错误
【发布时间】:2023-03-04 08:19:07
【问题描述】:

我正在尝试使用 async await 进行 API 调用,但它不起作用并且没有给出错误 在这里我试图调用 getRace() 来返回一个承诺,所以我在这里使用 await 关键字:

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

然后我调用 RaceInfo() 并使用 then 来处理响应:

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);
})

}

控制台没有返回错误,可能是什么问题?

【问题讨论】:

  • 您尚未从RaceInfo 返回值。试试return await getRace(raceID)

标签: javascript async-await


【解决方案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);

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2019-08-02
    • 2019-01-13
    • 1970-01-01
    • 2021-06-30
    相关资源
    最近更新 更多