使 Observables 以同步和异步方式运行的方法是啥?
Posted
技术标签:
【中文标题】使 Observables 以同步和异步方式运行的方法是啥?【英文标题】:What is the way to make Observables behave in both - synchronous and asynchronous ways?使 Observables 以同步和异步方式运行的方法是什么? 【发布时间】:2021-01-19 07:21:19 【问题描述】:发件人:What is the difference between Promises and Observables?
Promise 总是异步的,而 Observable 可以是同步的也可以是异步的
这意味着我们可以以特定方式编写代码,这可以使 Observables 有时以同步方式运行,有时以异步方式运行。
Observable 的默认行为是什么?是同步的还是异步的?
如何编写有时 Observable 行为异步、有时同步的功能?
【问题讨论】:
【参考方案1】:这实际上取决于 Observable 的调用方式。
-
如果底层调用是同步的,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>
-
如果底层调用是异步的,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>
【讨论】:
请解释您的代码。哪个部分是同步的,哪个是异步的?请在代码中编写 cmets。 @Aquarius_Girl:console.log 解释了代码流程,如果你看一下的话。请让我知道您是否需要具体说明以上是关于使 Observables 以同步和异步方式运行的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章