angular - CombineLatest,在所有 observables 完成后只执行一次
问题描述
我正在尝试解决一个问题。目前,我正在打开一个模式,但我需要为此结合 3 个路由可观察对象。所以,我的代码逻辑是这样的:
combineLatest([obs1, obs2, obs3])
.subscribe(([s1, s2, s3]: any) => {
openModal();
});
由于它将被执行 3 次,我的模态也将被打开 3 次,但我不希望它这样做,但我知道这是预期的行为。
因此,为此,我实施的糟糕解决方案是使用flag
这样的:
let shouldOpen = true;
combineLatest([obs1, obs2, obs3])
.subscribe(([s1, s2, s3]: any) => {
if(shouldOpen) {
shouldOpen = false;
openModal();
}
});
但当然,这不是一个好的解决方案。
所以,问题是,有没有办法让我继续使用combineLatest
但只执行一次?
如果您想尝试使用 combineLatest,这里有一个Stackblitz 。
注意:我不能使用
forkJoin
orzip
,我已经尝试过了。
解决方案
由于您不能使用forkJoin
(这是正确答案),请跳过前两个排放combineLatest
combineLatest([obs1, obs2, obs3])
.pipe(skip(2))
.subscribe(([s1, s2, s3]: any) => {
openModal();
});
您也可以使用skipWhile
跳过,直到所有三个都被定义:
.pipe(skipWhile(([s1, s2, s3]) => s1===undefined || s2 === undefined || s3===undefined))
推荐阅读
- reactjs - c# + reactjs + typescript + 基于令牌的身份验证的模板
- php - 使用 Abyss Web Server 实现 MySQL 时如何修复 HY000/2054?
- c# - 角色触墙后无法移动
- javascript - 将参数从我的函数传递到调用函数
- python-3.x - 如何使用 numpy 构建 RNN
- excel - 在 Excel 2016 (Office 365) 中隐藏/显示图表占位符
- python-3.x - 将 Numpy ndarray 连接到 Pandas 数据帧
- c++ - 在结构向量中获取数据作为输入时出现分段错误(SIGSEGV)
- html - CSS自定义下拉列表修改父div高度
- firebase - 在 Firebase 项目之间迁移 Firestore 数据