ReactiveX:如何实现异步行为

时间:2018-01-19 08:26:56

标签: javascript asynchronous rxjs reactivex

RxJS Observables是可以随时间,同步或异步地将零返回到无限值的函数。

但异步行为究竟是如何实现的呢?它是以某种方式使用单独的线程,还是使用Web API和JS事件循环?

1 个答案:

答案 0 :(得分:2)

异步行为源于运行时环境的API。

例如,implementation of fromEvent来电addEventListenerimplementation of AjaxObservable会产生XMLHttpRequest

RxJS可以使用调度程序向其他同步可观察对象引入异步行为。例如,使用of创建的可观察对象同步发出:



Rx.Observable
  .of(1, 2, 3)
  .subscribe(value => console.log("emitted", value));
console.log("subscribed");

.as-console-wrapper { max-height: 100% !important; top: 0; }

<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
&#13;
&#13;
&#13;

但是,如果指定了调度程序,则将使用调度程序(通常是异步)发出值:

&#13;
&#13;
Rx.Observable
  .of(1, 2, 3, Rx.Scheduler.asap)
  .subscribe(value => console.log("emitted", value));
console.log("subscribed");
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
<script src="https://unpkg.com/rxjs@5/bundles/Rx.min.js"></script>
&#13;
&#13;
&#13;

RxJS中有几个调度程序,它们都是使用异步浏览器API实现的:

当然,RxJS也可以与Node.js一起使用,并且在该环境中使用Node的API。