在订阅内订阅重复多次

Subscribe inside a Subscribe repeating multiple times

我有一个在订阅时输出数组的可观察对象

appleProducts.subscribe((snap) => {
   console.log(snap);
});

iphone.subscribe((snap) => { 
   console.log(snap); 
});

console output:

[ipad, iphone, mac]

[iphone4, iphone5, iphone6]


这两个订阅正在异步执行。但是,我需要在 iphone 之前获取 appleProducts,所以当我将 iphone.subscribe 函数放入 appleProducts.subscribe 函数时,发生了一些奇怪的事情:

appleProducts.subscribe((snap) => {
   console.log(snap);
   iphone.subscribe((snap) => { 
      console.log(snap);
   });
});

console output:

[ipad, iphone, mac]

[iphone4]

[iphone4, iphone5]

[iphone4, iphone5, iphone6]


有人知道为什么会这样吗?谢谢

要在下一个结果之前获得一个可观察结果的结果,请使用 instance operator concat

appleProducts.concat(iphone).subscribe(...)

订阅会先输出第一个observable的结果。完成后,它将输出第二个结果。

您可以使用 static method concat

获得相同的结果
Observable.concat(appleProducts, iPhone).subscribe(...)

所以在被引导到 rxjs 的 'concat' 函数之后,我研究了其他东西,比如 'forkJoin' (没有用),我找到了我的解决方案 'merge'

示例代码解决方案:

var source = Rx.Observable.merge(
    appleProducts,
    iphone);

var subscription = source.subscribe(
    function (x) {
        console.log('Next: ' + x);
    },
    function (err) {
        console.log('Error: ' + err);
    },
    function () {
        console.log('Completed');
    });

console output:

[ipad, iphone, mac]

[iphone4, iphone5, iphone6]

你在使用 AngularFire2 吗?如果是,则与 Firebase 列表问题有关。 他们正在努力

看到这个https://github.com/angular/angularfire2/issues/574