我看过类似的问题,但是它们对我没有用。我有一个返回诺言的服务(使用toPromise())。我正在尝试使用async / await调用它,但是它不等待上一次调用完成。
courses.forEach(async course=>{
let teacherId=await this.teacherService.getTeacherDetail(course);
console.log("Pushing teacher detail")
teacherDetail.push(teacherId);
})
console.log("Final arr",teacherDetail);
每一次,最终的arr都会打印在“推送教师详细信息”语句之前。我可能做错了什么?
答案 0 :(得分:0)
如何调试此问题:
courses.forEach(async course=>{
let teacherId=await this.teacherService.getTeacherDetail(course);
console.log("Pushing teacher detail")
teacherDetail.push(teacherId);
})
console.log("Final arr",teacherDetail);
步骤1)
courses.forEach(async course=>{
debugger;
let teacherId=await this.teacherService.getTeacherDetail(course);
debugger;
当第一个断点到达时,表明至少有一个迭代。如果您单步执行下一条语句。
let teacherId=await this.teacherService.getTeacherDetail(course);
这被称为对TeacherID的关闭,我们要等待右侧的结束。这意味着直到有TeacherID,代码才会继续执行。
第2步)
继续执行singleStep,直到您进入服务代码方法为止。
getTeacherDetail(course) { // where it does something }
始终遵循逻辑,直到兑现承诺。您看到这样的代码了吗?
resolve(teacherID);
第3步)
某物的值是返回到等待中的值,应该是平易近人ID。
要回答的问题