javascript - 异步等待不工作,控制台不返回错误
问题描述
我正在尝试使用 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
,并且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);
推荐阅读
- python - 使用 Tesseract OCR 从扫描的 pdf 文件夹中提取文本
- java - 从 Firebase 获取数据列表并在不同的活动/片段中共享的最佳实践
- python - 将平面上的 3D 坐标转置到新的 2D 坐标系
- ffmpeg - 不支持 DVCPRO HD 编码上的 ffmpeg 错误
- android - 列表项属性更改时,Livedata 不会更新撰写状态
- docker - 如何将带有 Docker 容器的工作目录移动到另一台机器上
- python-3.x - Python(Flask,SQLAlchemy)中的 InterfaceError - db.relationship 参数的错误绑定参数
- sequence - Dafny 序列何时相等?
- javascript - 如何使用 react-dom-router 处理活动路由/路由更改
- python - 如何在 Pandas 数据框上创建具有串联的交叉表?