我正在执行嵌套订阅,我知道这不是完美的方法。 我有这样的东西:
this.route.params.subscribe((params) => {
this.order$
.getMailCommande(this.id)
.subscribe((datas) => {
var Object = localStorage.getItem('dataCommand');
var test = JSON.parse(retrievedObject);
this.over = test.over;
while (this.over == false) {
this.order$
.getMoreInfo(this.id, this.type, this.nbr)
.subscribe((datas2) => {
var array = datas2.MoreInfo;
var Object2 = localStorage.getItem('dataCommand');
var test2 = JSON.parse(Object2);
test2.ListeInfo.push(array);
this.over = true;
});
}
自从我添加了循环后,我得到了一个无限循环,我正在寻找使用RxJS的switchmap或运算符更改此代码的方法,但尚未成功。
关于我的无限循环以及如何保持相同逻辑的任何想法吗?
预先感谢
答案 0 :(得分:0)
如果您想在循环中执行所需的逻辑并在某些条件匹配时中断,那么除非满足条件,否则要有一个单独的方法来调用自身?
this.route.params.subscribe((params) => {
this.order$
.getMailCommande(this.id)
.subscribe((datas) => {
var Object = localStorage.getItem('dataCommand');
var test = JSON.parse(retrievedObject);
this.over = test.over;
while (this.over == false) {
this._loopMeOver.subscribe();
}
})
})
private _loopMeOver() {
return this.order$
.getMoreInfo(this.id, this.type, this.nbr)
.map((datas2) => {
var array = datas2.MoreInfo;
var Object2 = localStorage.getItem('dataCommand');
var test2 = JSON.parse(Object2);
test2.ListeInfo.push(array);
if (condition is successfull) {
//return true mayBe
}
else {
this._loopMeOver().subscribe()
}
});
}
答案 1 :(得分:0)
我看不到您的完整代码,无法完全了解您要执行的操作。但是我有点觉得您刚刚开始学习rxjs,this.over
事物正在尝试继续检查嵌套请求是否完成。而且示例代码btw中存在各种错误。
因此,是的,您将需要其他{x1}这样的rxjs运算符来使代码更整洁。我将使用新的rxjs pipable语法向您展示如何执行此操作的一般概念。
switchMap()