【发布时间】:2020-08-08 10:29:41
【问题描述】:
在我的ngOnInit 挂钩中,我正在从我的数据服务加载学生宿舍列表。如果列表为空(如果之前未在其他组件中加载列表,则会发生这种情况),我必须从后端加载列表。
所以我想让我的程序做的是:
从数据服务加载列表 -> if (list.length > 0) -> 使用这个列表。 Else -> 从后端加载列表。
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) 而不是只使用else,但结果是一样的。
我检查了,上面的代码确实只出现在ngOnInit 钩子上,所以答案不是我只是错误地复制并粘贴到某个地方,因此它运行了两次......我想也许它必须这样做使用 else 语句中的 Observable,即使不应该运行 else 语句,它是否仍然订阅它?
【问题讨论】:
-
它们是订阅,可以运行多次。
-
哦,是的,你是对的,就是这样。代码首先进入 else 语句,从后端加载列表,然后我更新我的数据服务并因此在 currentDorms$ Observable 上触发下一个。然后 dorms.length 变大为 0 并执行 if 语句!
-
如果你只想要第一次发射然后使用 pipe(take(1)).subscribe
标签: javascript angular observable