首页 > 解决方案 > IF 和 ELSE 语句中的代码都被执行

问题描述

在我的ngOnInit钩子中,我正在从我的数据服务加载学生宿舍列表。如果列表为空(如果之前未在其他组件中加载列表,则会发生这种情况),我必须从后端加载列表。所以我想要我的程序做的是:

从数据服务加载列表 -> if (list.length > 0) -> 使用此列表。其他 -> 从后端加载列表。

ngOnInit(): void { 
  this._update.currentDorms$
  .subscribe(dorms => {
    if (dorms.length > 0) {
      this.dorms = dorms
      console.log("if statement", dorms)
    } else {
      this._data.getDormLocations().subscribe(dorms => {
        this.dorms = dorms;  
        this._update.changeDorms(dorms);
        console.log("else statement", dorms)})
    }
 })
}

console.log()当我打开页面时,这两个语句都会执行:

结果

我也尝试使用else if (dorms.length == 0)而不是 just else,但结果是一样的。

我检查了,上面的代码真的只出现在ngOnInit钩子上,所以答案不是我只是错误地将它复制并粘贴到某个地方,因此它运行了两次......我认为它可能与 else 中的 Observable 有关语句,即使不应该运行 else 语句,它是否仍然订阅它?

标签: javascriptangularobservable

解决方案


当我不在currentDorms$else 部分更新 Observable 时,只会执行 else 语句。那是因为代码首先进入 else 语句,从后端加载列表,然后我currentDorms$在我的数据服务中更新 Observable,因此接下来在currentDorms$Observable 上触发。这将再次运行订阅中的代码,这次dorms.length是更大的 0 并执行 if 语句。

奇怪的是,console.log 形式的 if 语句仍然首先打印出来。


推荐阅读