可观察到的 zip(数组)的 RXJS zip 未触发
RXJS zip of zip (arrays) observable is not firing
我正在尝试从一个压缩的可观察对象数组中获取结果,它们本身就是简单可观察对象数组的压缩。如下:
a(x) {
const observables = [of(x), of(x+1)];
return zip(observables);
}
b() {
const observables = [a(1), a(2)];
return zip(observables);
}
断言其余代码可以正常工作。实际上,当内部 a() 函数 returns 单个可观察对象(当然是对象数组,以反映可观察对象的 zip)时,外部 zip 工作正常。然而,当使用内部 zip 时,永远不会调用内部 zip 中的代码。
我做错了什么?
我花了多少时间解决这个问题..
尝试:
zip(...observables);
必须展开参数,否则您的数组将被视为 ObservableInput
,这可能不是所需的行为。
您可以将此函数作为您的用例的安全后备:
export function zipArray<T>(array: ObservableInput<T>[]): Observable<T[]> {
return array.length ? zip(...array) : of([]);
}
并这样称呼它:
zipArray(observables)
有什么问题:zip([Obs1, Obs2])
与 zip(Obs1, Obs2)
不同。
但是有一个技巧可以实现转换:...argsArray[]
使数组表现得好像它是一堆参数(例如等同于 python 中的 *args
)。
此外,如果您发现自己在可迭代对象中重复使用 of
运算符,那么也许您应该考虑使用 from
运算符。
function a(x) {
const observables = from([x, x+1]);
return zip(observables);
}
function b() {
const observables = [a(1), a(2)];
return zip(...observables);
}
测试 :
b().subscribe(val =>console.log(val))
[[1], [2]]
[[2], [3]]
您有 [1] 而不是 1 是正常的,因为 zip returns 的输出是一个包含值的数组。
我正在尝试从一个压缩的可观察对象数组中获取结果,它们本身就是简单可观察对象数组的压缩。如下:
a(x) {
const observables = [of(x), of(x+1)];
return zip(observables);
}
b() {
const observables = [a(1), a(2)];
return zip(observables);
}
断言其余代码可以正常工作。实际上,当内部 a() 函数 returns 单个可观察对象(当然是对象数组,以反映可观察对象的 zip)时,外部 zip 工作正常。然而,当使用内部 zip 时,永远不会调用内部 zip 中的代码。
我做错了什么?
我花了多少时间解决这个问题..
尝试:
zip(...observables);
必须展开参数,否则您的数组将被视为 ObservableInput
,这可能不是所需的行为。
您可以将此函数作为您的用例的安全后备:
export function zipArray<T>(array: ObservableInput<T>[]): Observable<T[]> {
return array.length ? zip(...array) : of([]);
}
并这样称呼它:
zipArray(observables)
有什么问题:zip([Obs1, Obs2])
与 zip(Obs1, Obs2)
不同。
但是有一个技巧可以实现转换:...argsArray[]
使数组表现得好像它是一堆参数(例如等同于 python 中的 *args
)。
此外,如果您发现自己在可迭代对象中重复使用 of
运算符,那么也许您应该考虑使用 from
运算符。
function a(x) {
const observables = from([x, x+1]);
return zip(observables);
}
function b() {
const observables = [a(1), a(2)];
return zip(...observables);
}
测试 :
b().subscribe(val =>console.log(val))
[[1], [2]]
[[2], [3]]
您有 [1] 而不是 1 是正常的,因为 zip returns 的输出是一个包含值的数组。