首页 > 解决方案 > 发生错误时如何跳出循环

问题描述

我试图在错误响应中跳出 for 循环并控制台错误消息。这是我尝试过的

     var error = 0;
     var errorMsg;    
      for (let i = 0; i < this.fileArray.length; i++) {
          if ( this.fileArray[i] != undefined ) {
            if ( error == 0 ) {
              const fd = new FormData()
              fd.append('file', this.fileArray[i], this.fileArray[i].name)
              this.data.ImgUploader(fd).subscribe(
                res => {
                  if ( res['code'] != '00' ) { //error occurred. 1 is assigned to var error
                    error = 1
                    errorMsg = res['message']
                  } else {
                    error = 0
                  }
                }
              )
            } else {
              console.log(errorMsg)
              break;
            }
          }
        }

我通过ImgUploader函数发送一些图像文件并通过回调接收响应。我试图通过错误代码观察错误并分配1给变量error。我现在期望变量error == 1,但代码仍然进入代码块 where error == 0. 请问我哪里出错了。谢谢。

标签: angularloops

解决方案


您无法从传递给的回调中跳出循环subscribe。循环结束后调用回调。

JavaScript 代码在单个线程上运行。这就是为什么在您的代码片段中首先执行所有循环迭代的原因。由于error始终具有值 0,error == 0因此在所有循环迭代中都将为真。的回调subscribe只能在循环完成后执行。此时error变量的值发生了变化,但没有任何区别,因为循环已经完成。

如果您想了解更多浏览器引擎盖下发生的事情,我推荐这个演讲:https ://www.youtube.com/watch?v=8aGhZQkoFbQ


推荐阅读