我的方案是我通过aws sdk将记录集添加到主机区域。添加记录集时,aws sdk具有GetChange
调用,可用于获取该状态。这是我目前正在做的代码:
this._adminService.registerDomain(caseWebsiteUrl.Url).
subscribe(id => {
return Observable.interval(5000).flatMap(() => {
return this._adminService.getChange(id);
}).
takeWhile((s) => s.ChangeInfo.Status.Value !== 'INSYNC').subscribe(
() => {
},
() => {
},
() => this.urlStatus = 'fa fa-check');
});
在上面的代码中,我想致电registerDomain
,之后成功,我希望每getChange
次致电5 seconds
,直至Status.Value !== 'INSYNC'
几个问题:
答案 0 :(得分:1)
Flatmap aka MergeMap将展平更高阶的可观察量。因此Observable<Observable<T>> => Observable<T>
。
订阅内部订阅是一种代码气味,可以而且应该重构。如果您不需要错误/完整处理程序,则不需要传递它们。例如:
function registerDomain(caseWebsiteUrl) {
return this._adminService.registerDomain(caseWebsiteUrl.Url)
.concatMap(registerId => Observable.interval(5000)
.mergeMap(() => this._adminService.getChange(registerId))
.takeWhile((info) => info.ChangeInfo.Status.Value !== 'INSYNC')
)
}
registerDomain.subscribe(res => console.log('res:'+res));
这基于以下假设和限制:
registerDomain()
返回完成的Observable getChange()
最终将返回'INSYNC'registerDomain()
失败则重试?)