在引擎盖下,rxjs如何监听变化

在引擎盖下,rxjs如何监听变化,rxjs,event-listener,Rxjs,Event Listener,由于浏览器的domapi是通过事件循环工作的,为了监听DOM上的更改,我们注册了事件处理程序 RXJS在幕后实现了什么,以便订阅者监听数据中的更改 我可能完全错过了这里的情节。(我每天都在使用它们,但我想知道它们是如何与domapi一起工作的) 我了解观察者模式,但这是一个设计抽象,我正在寻找的是核心RXJS如何使用DOM 直截了当的方法是查看源代码:正如您希望看到DOM交互和DOM API(例如,setInterval)可观察的只是函数。它们并没有提供任何特殊的功能,它们只是提供Javascr

由于浏览器的domapi是通过事件循环工作的,为了监听DOM上的更改,我们注册了事件处理程序

RXJS在幕后实现了什么,以便订阅者监听数据中的更改

我可能完全错过了这里的情节。(我每天都在使用它们,但我想知道它们是如何与domapi一起工作的)


我了解观察者模式,但这是一个设计抽象,我正在寻找的是核心RXJS如何使用DOM

直截了当的方法是查看源代码:正如您希望看到DOM交互和DOM API(例如,setInterval)

可观察的只是函数。它们并没有提供任何特殊的功能,它们只是提供Javascript平台、浏览器或节点提供的功能强大的范例。RxJS的强大之处在于可以在转换管道中组合的一组丰富的函数和运算符。这就是观测的魔力所在

考虑以下示例,该示例封装了节点的
fs
模块提供的
readline
函数

const readLineObs = (filePath: string): Observable<string> => {
  return Observable.create(
    (observer: Observer<string>): TeardownLogic => {
      const rl = readline.createInterface({
        input: fs.createReadStream(filePath),
        crlfDelay: Infinity
      });

      rl.on("line", (line: string) => {
        observer.next(line);
      });
      rl.on("close", () => {
        observer.complete();
      });
    }
  );
};
用“直截了当”的方式回答。如需了解更多信息,您需要对调度程序进行“研究”(来自StackOverflow规则)(示例-docs:)
readLinesObs('my_path_to_file').pipe(
  filter(line => line[0] === 'A'), // take only the lines which start with A
  map((line, i) => i + '_' + line),  // add a line number at the start of the line
  take(10),  // just take the first 10 lines
  // do all other types of transformations you may need
)