【问题标题】: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 行为异步、有时同步的功能?

【问题讨论】:

    标签: javascript angular typescript asynchronous rxjs


    【解决方案1】:

    这实际上取决于 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>

    【讨论】:

    • 请解释您的代码。哪个部分是同步的,哪个是异步的?请在代码中编写 cmets。
    • @Aquarius_Girl:console.log 解释了代码流程,如果你看一下的话。请让我知道您是否需要具体说明
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多