RxJS Observables是可以随时间,同步或异步地将零返回到无限值的函数。
但异步行为究竟是如何实现的呢?它是以某种方式使用单独的线程,还是使用Web API和JS事件循环?
答案 0 :(得分:2)
异步行为源于运行时环境的API。
例如,implementation of fromEvent
来电addEventListener
和implementation 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;
但是,如果指定了调度程序,则将使用调度程序(通常是异步)发出值:
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;
RxJS中有几个调度程序,它们都是使用异步浏览器API实现的:
AsyncScheduler
使用setInterval
; AsapScheduler
使用setImmediate
;和AnimationFrameScheduler
使用requestAnimationFrame
。当然,RxJS也可以与Node.js一起使用,并且在该环境中使用Node的API。