javascript - 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 语句,它是否仍然订阅它?
解决方案
当我不在currentDorms$
else 部分更新 Observable 时,只会执行 else 语句。那是因为代码首先进入 else 语句,从后端加载列表,然后我currentDorms$
在我的数据服务中更新 Observable,因此接下来在currentDorms$
Observable 上触发。这将再次运行订阅中的代码,这次dorms.length
是更大的 0 并执行 if 语句。
奇怪的是,console.log 形式的 if 语句仍然首先打印出来。
推荐阅读
- websocket - 托管服务器端 Blazor 应用程序时 SignalR 出现问题
- angular - Angular 渲染 FormArray,在一页中包含 10k+ 行(每行 15 列)数据
- javascript - 单击多个图像可同时播放多个音频
- google-kubernetes-engine - 在 GKE 上使用 Istio 获取 Envoy 访问日志
- python - 在 Python 中嵌套时展平元组
- angular - ngbTooltip 不适用于动态创建的元素
- java - 如果按钮空闲,如何启动线程?
- java - 在 Java 中创建 UDF 以将一个数据框列映射到另一列
- java - 尝试在 Spoj 中提出问题,我编写的代码被接受,但显示内存使用为 4468mb。是什么导致如此高的内存使用率?
- sendgrid - 通过带有“&”的 sendgrid 发送模板电子邮件时发出警告