嵌套订阅无限循环-Angular / RxJS

时间:2018-08-17 12:37:32

标签: javascript angular typescript rxjs

我正在执行嵌套订阅,我知道这不是完美的方法。 我有这样的东西:

 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或运算符更改此代码的方法,但尚未成功。

关于我的无限循环以及如何保持相同逻辑的任何想法吗?

预先感谢

2 个答案:

答案 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()