是否有像Promise.resolve()
这样的Rx运算符,其中 可以将可观察值或普通值解析为普通值?类似的可观察运算符Promise.resolve()
例如,我可以这样做:
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();
,但我正在寻找一个更规范的方式做到这一点?
谢谢,在这种情况下,天真的答案是只返回数组,而不是分别发出值。在我的问题中,我将Promise.resolve()与promise的整个企业混为一谈,然后在返回值上调用Promise.resolve,然后返回一个新的承诺。有点令人困惑,但我认为你明白了。 –
这使得你的'Observable.any'实现稍微复杂一些,因为你需要测试数组,数组类,iterables或'Observable.from'会将它们变成发射单独值的观察值。 – cartant
是的,与你提到的阵列的事情,这将弄乱我的Rx.Observable.any方法,所以我回到了一个 –