angular - 如何使用 Observable 每 1 秒(Angular 5)从数组中发出每个值?
问题描述
我有一个产品列表和一个数组产品:Product[]
使用 Observable 和 Observer next 方法,我想每 1 秒后将每个产品发送到我的 UI。我怎样才能做到这一点?
这是我尝试过的,它正在产生一个无限循环。任何帮助将不胜感激。
public streamAllProducts(): Observable<Product> {
const products = this.ds.getProducts();
const sequence = new Observable((observer) => {
products.forEach(element => {
setTimeout(() => {
observer.next(element);
}, 1000
);
});
});
return sequence;
}
解决方案
您可以使用delay
运算符和observer.complete()
更新
interval
每次您可以使用迭代(无限)时,该运算符都会生成一个具有递增值的可观察对象。- 您可以使用 a
Subject
来轻松生成。 - 您可以处理内部订阅并在没有更多产品要发出时停止它。
public streamAllProducts(): Observable<Product> {
const products = this.ds.getProducts();
const sequence = new Subject<Product>();
let timer: Subscription;
timer = interval(1000).subscribe(index =>
index < products.length
? sequence.next(products[index])
: timer.unsubscribe()
);
return sequence;
}
推荐阅读
- javascript - 当变量达到特定值时向所有客户端发出
- html - Rails在body标签内渲染导航栏
- javascript - React Native 在模态中更改虚拟数据的状态
- r - 用 optim() 求方程的最大值
- reactjs - 如何保持 React Native 动画变换状态?
- python - 如何在命令后使不和谐机器人存储/查找消息的其余部分?
- mysql - 试图让 ocelotgui 调试工作
- python - Python django django-crontab 只运行一次。我如何测试它每分钟运行一次?
- python - 麻省理工学院 6.0001 pset1 部分 C
- flex-lexer - 没有预期的 Lex 输出