Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将RxJS Observable.from与实现Observable接口的对象一起使用_Rxjs_Observable_Rxjs5 - Fatal编程技术网

将RxJS Observable.from与实现Observable接口的对象一起使用

将RxJS Observable.from与实现Observable接口的对象一起使用,rxjs,observable,rxjs5,Rxjs,Observable,Rxjs5,基于for RxJS的Observable.from(),听起来您应该能够向它传递一个实现Observable接口的对象。然而,以下情况 const observable = { subscribe(observer) { const subscription = someAsyncProcess(res => observer.next(res)); return { unsubscribe() { subscription.unsubs

基于for RxJS的
Observable.from()
,听起来您应该能够向它传递一个实现Observable接口的对象。然而,以下情况

const observable = {
  subscribe(observer) {
    const subscription = someAsyncProcess(res => observer.next(res));

    return {
      unsubscribe() {
        subscription.unsubscribe();
      }
    }
  }
};


Rx.Observable.from(observable)
  .subscribe({
    next(res) {
      console.log(res);
    }
  });
抛出错误

未捕获类型错误:对象不可见

我的可观察实现是否不正确?还是我误解了


注意:这更像是一个关于可观察界面的学术问题——我意识到
可观察。create()
在上述情况下可以工作。

您可以使用Observable.from,如果它是一个事件数组或Observable.of,如果它是一个简单的对象。它不必实现任何接口。下面的代码正在控制台中打印a

   Rx.Observable.from("a").subscribe(data=> console.log(data));
通过实现一个“符号函数”(我不知道这个函数的正确名称),你可以“欺骗”RxJS,使其认为你传递的对象是一个真正的可观察对象。但是,在实践中可能永远不需要这样做,最好使用
Observable.create

const Rx = require('rxjs/Rx');
const Symbol_observable = Rx.Symbol.observable;
const Observable = Rx.Observable;

const observable = {
    [Symbol_observable]: function() {
        return this;
    },

    subscribe: function(observer) {
        // const subscription = someAsyncProcess(res => observer.next(res));
        observer.next(42);

        return {
            unsubscribe() {
                subscription.unsubscribe();
            }
        }
    }
};

Observable.from(observable)
    .subscribe({
        next(res) {
            console.log('Next:', res);
        }
    });
这张照片是:

Next: 42