Javascript Promise.resolve()的类似可观测运算符

Javascript Promise.resolve()的类似可观测运算符,javascript,node.js,rxjs5,Javascript,Node.js,Rxjs5,是否有像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

是否有像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();
上面的代码将接受一个数字,但如果您传递给它一个可观察的,它将不会打开可观察的

老实说,这是非常令人沮丧的是,这是如此难以确定。拥有这样的方法/特性将允许更灵活的代码,因为您可以重构代码以返回不可观察的结果,并且仍然可以工作

以下是我迄今为止得到的最接近的结果:

// 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();

但我正在寻找一种更规范的方法来实现这一点…

正如你在问题中所指出的,有可观察的。从和可观察的

获取一个参数,该参数可以是可观察的、承诺的或数组的,也可以是可观察的或类似数组的对象,并返回一个可观察的-数组值分别发出

接受作为要发出的值的参数

与promises不同的是,没有一个单一的策略可以满足所有的目的——例如,有一些运算符处理自己发出可观测值的可观测值。对于承诺来说,这不是一个问题,因为它要么是一个承诺,要么不是——而且,一个承诺变成另一个承诺也没有多大意义


如果您可以制定一个适合您的策略,那么编写使用Observable.from和Observable.of实现的自己的函数应该非常简单。您需要决定的第一件事是如何处理数组:您想要一个发出数组本身还是单独发出数组值的可观测对象?

谢谢,在这种情况下,简单的答案是只返回数组,而不是单独发出值。在我的问题中,我将Promise.resolve与Promise.then的整个企业混为一谈,后者在返回值上调用Promise.resolve,然后返回一个新的Promise。有点混乱,但我想你明白了。这使你的可观察性。任何实现都有点棘手,因为你需要测试数组、数组类和可观察性或可观察性。from会将它们转换为发出单独值的可观察性。是的,对于你提到的数组,这将打乱我的Rx.Observable.any方法,因此我回到了原点。我认为RxJS库将数组视为可观测数组是一个错误。大错误。为了获得可观察的行为,你应该包装一个对象/数组,等等。例如:Rx.Observable[];在我看来,这是一个典型的API错误。他们试图压缩性能,但代价太高了……顺便说一句,Rx.Observable.of[1,2,3]。mergeMapvalue=>值将与Rx.Observable.from[1,2,3]或flatMap相同。mergeMap是RxJS5别名。