【发布时间】:2017-10-15 11:30:48
【问题描述】:
我是 Angular 4.3 的新手。我有一个地图应用程序,它通过下载一系列小图像(“图块”)来呈现“地图层”。启动时,下载地图图层可能需要 0.1 - 5.0 秒。
当客户端收到两个或更多图块时,我需要触发一个事件。我原以为我可以通过订阅一个以 200 毫秒间隔重试多达 30 次的 Observable 来实现这一点。
到目前为止:
public updateTileContainer() {
this._getTileContainer().subscribe(container => {
if (container) {
console.log('* do stuff with container *');
}
});
}
private _getTileContainer(): Observable<any> {
return Observable.interval(200)
.mergeMap(function (n) {
const tileImages = $('#mymap').find('img[src*=\'kml\']');
console.log(`Retry ${n}: ${tileImages.length} tiles found`);
if (!tileImages || tileImages.length < 2) {
return Observable.of(null);
}
const tileContainer = getContainer(tileImages);
return Observable.of(tileContainer);
})
.take(30);
}
这行得通!有点。我得到这个输出:
Retry 0: 0 tiles found
Retry 1: 0 tiles found
Retry 2: 0 tiles found
Retry 3: 0 tiles found
Retry 4: 0 tiles found
Retry 5: 0 tiles found
Retry 6: 0 tiles found
Retry 7: 2 tiles found
* do stuff with container *
Retry 8: 3 tiles found
* do stuff with container *
Retry 9: 9 tiles found
* do stuff with container *
Retry 10: 12 tiles found
* do stuff with container *
etc.
我实际上想要做的是在“重试 7”处发出一个事件,然后停止发出。
如何在找到容器后立即将其更改为“完成” Observable?以及如何“跳过”重试 0 到 6 的发射事件,因为它们不是真正的事件?如果 Observable 重试了 30 次而没有找到容器,我可以从 Observable 中抛出错误吗?
【问题讨论】:
-
This answer 看起来可能会对此有所了解。
标签: angular observable