如何使Observable同时以同步和异步方式运行



From:Promises和Observables之间的区别是什么?

Promise总是异步的,而Observable可以是同步的或异步的

这意味着我们可以用一种特殊的方式编写代码,这种方式有时可以使Observables以同步的方式运行,有时则以异步的方式运行。

Observable的默认行为是什么?它是同步的还是异步的?

如何编写这样的功能,使Observables有时表现为异步,有时表现为同步?

这实际上取决于Observable的调用方式。

  1. 如果基础调用是同步的,observable将表现为同步

const { Observable } = rxjs;
const helloWorld$ = new Observable(observer => {
observer.next('Hello World');
observer.complete();
});
console.log('Before subscribing helloWorld$');
helloWorld$.subscribe({
next: console.log,
complete: () => console.log('helloWorld$ on complete')
});
console.log('After subscribing helloWorld$');
<script src="//cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.3/rxjs.umd.min.js">
</script>

  1. 如果底层调用是异步的,observable将表现为异步

const { Observable } = rxjs;
const helloEarth$ = new Observable(observer => {
// mocking an ajax call
setTimeout(() => {
observer.next('Hello Earth from a galaxy far, far away...');
observer.complete();
}, 1000);
});
console.log('Before subscribing helloEarth$');
helloEarth$.subscribe({
next: console.log,
complete: () => console.log('helloEarth$ on complete')
});
console.log('After subscribing helloEarth$');
<script src="//cdnjs.cloudflare.com/ajax/libs/rxjs/6.6.3/rxjs.umd.min.js">
</script>

最新更新