美文网首页
Promise和Observable的映射

Promise和Observable的映射

作者: 草珊瑚_6557 | 来源:发表于2019-10-09 14:00 被阅读0次

    前言

    1. promise解决了嵌套地狱的问题,Observable解决了promise只有一个结果,和不可以取消的问题。
    2. 使用的是rxjs6版本。
    3. 这篇文章是方便使用Observable的API替换Promise的API。

    正常用法

    promise
    .then(result => {})
    .catch(error => {})
    .finally(() => {});
    
    observable.subscribe(
      result => {},
      error => {},
      ()=>{},  // finally
    );
    

    then

    promise
    .then(result => {})
    .then(result => {})
    .then(result => {})
    
    import { concat } from 'rxjs';
    concat(observable0,observable1,observable2).subscribe(
      result => {},
      error => {},
      ()=>{},  // finally
    );
    
    // promise
    this.getOne().then(data => {
      // 这里返回另外一个Promise
      return this.getTwo(data);
    }).then(data => {
      console.log(data);  // 这里打印第二个Promise的值
      return this.getThree(data);
    }).then(data => {
      console.log(data); // 这里打印第三个Promise的值
    });
    
    // Observable
    import { forkJoin, Observable,from,pipe } from 'rxjs';
    import { retryWhen, map, mergeMap } from 'rxjs/operators';
    
    from(this.getOne)
    .pipe(
        mergeMap(oneData => {
            console.log(oneData)
            return from(this.getTwo)
        }),
        mergeMap(twoData => {
            console.log(twoData)
            return from(this.getThree)
        })
    )
    .subscribe(threeData => {
        console.log(threeData)
        ...
    })
    

    Promise.all

    Promise.all([promise0, promise1]).then((result)=>{});
    
    import { forkJoin } from 'rxjs';
    forkJoin([observable0, observable1]).subscribe(result => {});
    

    Promise.race

    Promise.race([promise0, promise1]).then((result)=>{});
    
    import { race } from 'rxjs/observable/race';
    race([observable0, observable1]).subscribe(result => {});
    

    相关文章

      网友评论

          本文标题:Promise和Observable的映射

          本文链接:https://www.haomeiwen.com/subject/hwtoyctx.html