在订阅内订阅重复多次
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 列表问题有关。
他们正在努力
我有一个在订阅时输出数组的可观察对象
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 列表问题有关。 他们正在努力