• [RxJS] Execute tasks asynchronously with Async Scheduler


    The asyncScheduler lets you schedule tasks asynchronously, similar to a setTimeout. 

    All schedulers have a signature of work, delay, state, but provding a delay for any other schedular will simply default it to the asyncSceduler behind the scenes.

    The schedule call returns a subscription, so if you need to cancel work before it is performed you can simply unsubscribe, similar to observables.

    const sub = asyncScheduler.schedule(
      // work
      console.log,
      // delay
      2000,
      //state
      'Hello World!'
    )
    // sub.unsubscribe();

    Most static creation operators accepts a scheduler as the last argument. For instance, if we want to emit values from of() asynchronously, we can supply the asyncScheduler as the last argument.

    of(1, 2, 3, asyncScheduler).subscribe(observer);
    of(4, 5, 6).subscribe(observer);
    /* 4,5,6,1,2,3*/

    You can also introduce schedulers by using the observeOn operator. This is equivalent to wrapping next, error, and complete functions in appropriate scheduler.

    import {
      asyncScheduler,
      of,
    } from 'rxjs';
    import { observeOn, tap } from 'rxjs/operators';
    
    const observer = {
      next: (val) => console.log('next', val),
      error: (err) => console.log('error', err),
      complete: () => console.log('complete'),
    };
    
    of(1,2,3)
      .pipe(
        tap((val) => console.log('first tap', val)),
        // can add delay as second arguement
        observeOn(asyncScheduler, 2000),
        tap((val) => console.log('second tap', val))
      ).subscribe(observer);
    /*
    first tap 1
    first tap 2
    first tap 3
    second tap 1
    next 1
    second tap 2
    next 2
    second tap 3
    next 3
    complete
    */
    Lastly, you can use schedulers to determine when subscriptions occur by using the subscribeOn operator. This is equivalent to wrapping your entire subscription in a scheduler.
    of(1, 2, 3).pipe(tap(observer), subscribeOn(asyncScheduler, 2000));
     .subscribe(observer);
    
    /*
    from tap 1
    next 1
    from tap 2
    next 2
    from tap 3
    next 3
    complete
    */
  • 相关阅读:
    Zigbee安全基础篇Part.3
    Zigbee安全基础篇Part.2
    Zigbee安全基础篇Part.1
    mini2440 Nor Flash工作原理分析
    fuck the browser mode
    valgrind使用
    windows下自己常用的几个bat
    二叉树可视化
    npm的使用
    tp5的phpword使用
  • 原文地址:https://www.cnblogs.com/Answer1215/p/16750462.html
Copyright © 2020-2023  润新知