下面的代码工作得很好。控制台输出数组[1, 2]
。
const getAsyncValue = () => {
return new Promise(resolve => {
setTimeout(() => {
resolve(1);
}, 1000)
})
}
const getSyncValue = () => {
return Rx.Observable.of(2);
}
const observer = (arrayOfValues) => {
console.log(arrayOfValues);
}
Rx.Observable.of(getPromise(), getSyncValue())
.concatAll()
.toArray()
.subscribe(observer)
我想将函数getSyncFunction
更改为以下内容(因为在实际应用程序中,此函数可能没有对RxJs库的引用):
const getSyncValue = () => {
return 2;
}
如果我在没有任何其他情况下这样做,我会收到错误:
您提供了“2”,其中包含预期的流
我需要对代码进行哪些其他更改?也许提示我操作员使用。
答案 0 :(得分:3)
问题不在getSyncValue()
中,而在concatAll()
中适用于高阶Observable。当你只传递它2
时,它会抛出错误。使用Rx.Observable.of(2)
是正确的,因为它是一个Observable,它会发出一个由2
汇出的值concatAll()
。
我不知道你的代码应该做什么,但你可以这样做:
Rx.Observable.of(getPromise(), getSyncValue())
.map(v => typeof(v) == 'object' ? v : Rx.Observable.of(v))
.concatAll()
...
但是,我建议重新考虑这一点,因为我猜你可以使用一些比这更简单的方法。