是否有像Promise.resolve()
这样的Rx运算符
可以将Observable或plain值解析为普通值吗?
例如,我可以这样做:
Promise.resolve(3)
.then(function(val){
console.log('val => ',val);
});
当然,Promise.resolve()也会接受一个承诺
但是,我很难找到类似的Rx运算符, 类似的东西:
Rx.Observable.merge(3)
.do(function(val){
console.log('val => ',val);
})
.subscribe()
除Rx.Observable.merge
不接受所有值,并且将失败,如上所述。
Rx.Observable.of(3)
.map(v => {
console.log('val => ', v);
})
.subscribe();
上面会接受一个数字,但是如果你传递一个Observable,它就不会打开Observable。
老实说,这很难确定是非常令人沮丧的。拥有这样的方法/功能将允许更灵活的代码,因为您可以重构代码以返回不可观察的代码,它仍然可以工作。
这是我到目前为止最接近的地方:
// creates an Observable from anything, which can be unwrapped
Rx.Observable.any = function (val) {
if (!(val instanceof Rx.Observable)) {
val = Rx.Observable.of(val);
}
return val;
};
我们可以这样测试:
Rx.Observable.any([1, 2, 3])
.map(v => {
console.log('val => ', v);
})
.subscribe();
Rx.Observable.any('abc')
.map(v => {
console.log('val => ', v);
})
.subscribe();
Rx.Observable.any(4)
.map(v => {
console.log('val => ', v);
})
.subscribe();
Rx.Observable.any(Rx.Observable.timer(100))
.map(v => {
console.log('val => ', v);
})
.subscribe();
但我正在寻找一种更规范的方法来做到这一点......
答案 0 :(得分:1)
正如您在问题中所述,有Observable.from
和Observable.of
。
Observable.from
接受一个可观察,一个promise或一个数组(或一个可迭代或类似数组的对象)的参数,并返回一个observable - 数组值是单独发出的。
Observable.of
接受一个参数,即要发出的值。
与承诺不同,没有一个单一的政策适合所有目的 - 例如,有些运营商使用自己发出可观察量的可观察量。承诺它不是一个问题,因为它既可以是承诺,也可能不是承诺 - 并且对于承诺解决另一个承诺没有多大意义。
如果您可以制定适合您的政策,编写使用Observable.from
和Observable.of
实施的自己的功能应该非常简单。您需要决定的第一件事是如何处理数组:您是否想要一个可以自己发出数组或者单独发出数组值的observable?