[RxJS] Schedular basic

  subscribeOn() {
    // Changes source execution
    // only used once
    of(1).pipe(
      subscribeOn(async)
    )
    .subscribe({
      next: x => console.log(x),
      complete: () => console.log('3')
    })
    console.log('2')

    //2 1 3
  }

  observeOn() {
    // Changes notifications execution  (next, error, complete)
    // Can be used before each operators
  }

  queueSchedular() {
    // execute synchronously
    // tasks execute in order
    // waits until current task ends before exeucting next one
    // performant (precedes event loop)

    queue.schedule(() => console.log(1)) // sync
    console.log(2) // sync
    queue.schedule(() => console.log(3)) // sync
    
    // 1 2 3

    queue.schedule(() => {
      // when nested queue, change behavior
      queue.schedule(() => console.log(1)) // async
      console.log(2) // sync
      queue.schedule(() => console.log(3)) // async
    })

    // 2 1 3
  }

  asapSchedular() {
    // executes asynchronously (micro)
    // Tasks execute before next tick
    // Relays on Promises
    // Performant (precedes event loop)
    setTimeout(() => console.log(1)) // macro
    asap.schedule(() => console.log(2)) // micro
    queue.schedule(() => console.log(3)) // snyc

    // 3 2 1
  }

  asyncSchedular() {
    // Executes asynchronously (macro)
    // Relays on setInterval
    // less performant (use event loop)
    async.schedule(() => console.log(1)) // macro
    asap.schedule(() => console.log(2)) // micro
    queue.schedule(() => console.log(3)) // snyc

    // 3 2 1
  }

  cancelling() {
    const s = new AsyncScheduler(AsyncAction)
    const DELAY = 0;
    let subscription = s.schedule(v => console.log(v), DELAY, '1')
    s.schedule(v => console.log(v), DELAY, '2')
    console.log('3')
    subscription.unsubscribe();

    // 3 2 
    // 1 got cancelled
  }

  internalTime() {
    const s = new AsyncScheduler(AsyncAction)
    const DELAY = 2000; 
    const start = Date.now()

    s.schedule(v => console.log(v), DELAY, 1)
    s.schedule(v => console.log(v), DELAY, 2)
    s.schedule(v => console.log(`${s.now() - start}ms`), DELAY)
    console.log(3)

    // 3 1 2 2008ms
  }
原文地址:https://www.cnblogs.com/Answer1215/p/12791548.html