【问题标题】:RxJS - how to pass new props to observerRxJS - 如何将新道具传递给观察者
【发布时间】:2018-11-07 20:38:54
【问题描述】:

使用 RxJS 如何在观察者上传递新属性?所以基本上我希望道具“customProp”可用于观察

const { Observable } = require('rxjs');

const observable = Observable.create(function (observer) {
    console.log(observer.customProp); //How to get this working?
    observer.next(1);
    observer.next(2);
    observer.next(3);
    setTimeout(() => {
        observer.next(4);
        observer.complete();
    }, 1000);
});

console.log('just before subscribe');
observable.subscribe({
    next: x => console.log('got value ' + x),
    error: err => console.error('something wrong occurred: ' + err),
    complete: () => console.log('done'),
    customProp: 'Hello World RxJS',
});
console.log('just after subscribe');

---->>> Output
just before subscribe
undefined //How can I get this working, please?
got value 1
got value 2
got value 3
just after subscribe
=> undefined
got value 4
done

添加更多信息——所以基本上我正在尝试创建一个冷可观察对象,其中生产者需要一个应该来自订阅者的道具

//Cold observable
var coldObservable = new Observable((observer) => {
    var myProducerObj = new MyProducer();
    myProducerObj.executeQuery(observer.customProp);
   // How could we get customProp over here?
});

添加使用信息 --- ColdObservable 是 DB 连接函数,customProp 是需要在 DB 上执行的查询

【问题讨论】:

  • 你有 XY 问题。考虑解释一下 ColdObservable 内部到底发生了什么。 myProducerObj 有什么用?
  • coldObservable是DB连接函数,customProp是需要在DB上执行的查询
  • 请用解释如何使用 myProducerObj 的代码更新问题。解决方案取决于此。
  • @estus 添加了 db 查询执行步骤,因此假设 myProducerObj 是具有方法 executeQuery 的 DB 连接对象。所以 customProp 应该从订阅者那里得到查询
  • 这取决于observermyProducerObj 的交互方式,除了customProp,这里没有显示。我发布了一个答案,一般来说如何做到这一点,但我很肯定这可以以比目前更好的方式解决。在编写良好的 RxJS 中,您很少需要 Observable 构造函数,它用于低级操作。

标签: node.js rxjs observable


【解决方案1】:

如果不扩展 Observable 类,这是不可能的,这不是必需的。可能是工厂函数:

const createObservableWithCustomProp = (customProp, observer) => {
  return new Observable((observer) => {
    var myProducerObj = new MyProducer(customProp);
    ...
  });
};

通常很少需要手动构建 observables,因为 RxJS API 提供了丰富的功能集来创建、转换和组合 observables。

【讨论】:

  • 很高兴它有帮助。
猜你喜欢
  • 1970-01-01
  • 2017-01-23
  • 2023-03-26
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多