Observable.of转异步

smn*_*brv 4 javascript asynchronous observable rxjs5

我即将模拟一个包含在observable中的http调用.我最初的想法是简单地使用Observable.of类似的Promise.resolve,但它似乎没有像我预期的那样工作:

Rx.Observable.of('of1').subscribe(e => console.log(e));

console.log('of2');

Rx.Observable.from(Promise.resolve('from1')).subscribe(e => console.log(e));

console.log('from2');
Run Code Online (Sandbox Code Playgroud)
<script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.6/dist/global/Rx.umd.js"></script>
Run Code Online (Sandbox Code Playgroud)

它似乎在异步Observable.of运行时同步Rx.Observable.from(Promise.resolve('from1'))运行(这就是我想要的).只要我想测试微调器显示,同步调用对我来说不是一个选项.

当我延迟它或设置一个计时器时,有某种解决方案:

Rx.Observable.of('of1').delay(0).subscribe...
Run Code Online (Sandbox Code Playgroud)

但这对我来说也不好看.

如何转向Observable.of异步运行?将它从Promise转换似乎是一种矫枉过正.

Kwi*_*enP 5

如果您希望observable具有不同的行为,则可以将调度程序传递给它.一旦调用堆栈清除,您就可以使用异步调度程序来生成可观察的值.代码明智,这将是这样的:

Rx.Observable.of(1, 2, 3, Rx.Scheduler.async).subscribe(
    (val) => console.log(val)
);

console.log('first');
Run Code Online (Sandbox Code Playgroud)

这将注销:

//first
//1
//2
//3
Run Code Online (Sandbox Code Playgroud)

在这里工作jsbin示例:http://jsbin.com/cunatiweqe/6/edit?js,console