我将模拟包装到可观察性中的http调用。我最初的想法是简单地使用类似于Promise.resolve
的Observable.of
,但它似乎没有像我预期的那样工作:
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');
<script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.6/dist/global/Rx.umd.js"></script>
似乎Observable.of
是同步运行的,而Rx.Observable.from(Promise.resolve('from1'))
是异步运行的(这就是我想要的)。只要我想测试微调,同步调用对我来说就不是一个选项。
例如,当我延迟它或设置计时器时,有一种解决方案:
Rx.Observable.of('of1').delay(0).subscribe...
但这对我来说也不太好。
如何将Observable.of
设置为异步运行?将它从Promise转换为Promise似乎有点过头了。
发布于 2016-11-10 23:25:18
如果你想让一个可观察对象的行为不同,你可以给它一个调度器。一旦清除了调用堆栈,您就可以使用异步调度程序使可观察到的发射值。代码方面,这看起来像这样:
Rx.Observable.of(1, 2, 3, Rx.Scheduler.async).subscribe(
(val) => console.log(val)
);
console.log('first');
这将注销:
//first
//1
//2
//3
发布于 2019-10-10 14:39:45
最近的rxJS框架似乎更倾向于asyncScheduler
(从rxjs
导入)而不是async
(import from "rxjs/internal/scheduler/async"
)。示例:
import { of asyncScheduler } from "rxjs";
const ret = of(this.someVariable, asyncScheduler);
有关rxJS调度器的更多信息,请访问here。
https://stackoverflow.com/questions/40529599
复制相似问题