我需要在Angular 2中执行以下操作:
在for循环中放置一个observable会立即多次触发observable。这是一个糟糕的方法。什么是一个好方法?
答案 0 :(得分:2)
Observable有一个retry方法,只要数据无效就可以使用它抛出错误:
let src: Observable<any>;// the source Observable
src.map(data => {
if (!validate(data)) {
throw "Invalid data";
}
return data;
})
.retry() // you can limit the number of retries
.subscribe(data => {
// Do something with the data
});
如果您需要检查错误,可以使用retryWhen:
let src: Observable<any>;// the source Observable
src.map(data => {
if (!validate(data)) {
throw "Invalid data";
}
return data;
})
.retryWhen(errors => errors.map(err => {
if (err != "Invalid data") {
throw err;
}
})
.subscribe(data => {
// Do something with the data
});
答案 1 :(得分:1)
使用递归函数调用。
获取功能:
public getData(): Observable<any> {}
用法:
public refresh() {
this.yourService.getData().subscribe(data => {
// validate data !
if (dataValid(data) {
// do something cool here .. !
}
else {
this.refresh(); // do it again ..
}
});
}