角异步等待未按预期工作

时间:2020-10-21 08:28:46

标签: angular async-await observable

我看过类似的问题,但是它们对我没有用。我有一个返回诺言的服务(使用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都会打印在“推送教师详细信息”语句之前。我可能做错了什么?

1 个答案:

答案 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。

要回答的问题

  • 解决方案有价值吗?
  • 第二个调试器语句是否显示该值?
  • 您是否看到任何控制台错误?