我有一个可以在订阅上输出数组的observable
appleProducts.subscribe((snap) => {
console.log(snap);
});
iphone.subscribe((snap) => {
console.log(snap);
});
控制台输出:
[ipad,iphone,mac]
[iphone4,iphone5,iphone6]
这两个订阅正在异步执行。但是,我需要在iphone之前获取appleProducts,所以当我将iphone.subscribe
函数放在appleProducts.subscribe
函数中时,会发生一些奇怪的事情:
appleProducts.subscribe((snap) => {
console.log(snap);
iphone.subscribe((snap) => {
console.log(snap);
});
});
控制台输出:
[ipad,iphone,mac]
[iphone4的]
[iphone4,iphone5]
[iphone4,iphone5,iphone6]
有谁知道为什么会这样?感谢
答案 0 :(得分:1)
要从下一个结果获得一个observable的结果,请使用instance operator concat
appleProducts.concat(iphone).subscribe(...)
订阅将首先输出第一个observable的结果。完成后,它将输出第二个结果。
可以获得相同的结果Observable.concat(appleProducts, iPhone).subscribe(...)
答案 1 :(得分:0)
所以在引导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');
});
控制台输出:
[ipad,iphone,mac]
[iphone4,iphone5,iphone6]
答案 2 :(得分:0)
您使用的是AngularFire2吗?如果是,那么它与Firebase列表问题有关。 他们正在努力