8 Rxjs 異步數(shù)據(jù)流編程

8.1 Rxjs介紹

參考手冊(cè):https://www.npmjs.com/package/rxjs
中文手冊(cè):https://cn.rx.js.org/
RxJS 是 ReactiveX 編程理念的 JavaScript 版本。ReactiveX 來(lái)自微軟,`它是一種針對(duì)異步數(shù)據(jù) 流的編程。簡(jiǎn)單來(lái)說(shuō),它將一切數(shù)據(jù),包括 HTTP 請(qǐng)求,DOM 事件或者普通數(shù)據(jù)等包裝成流 的形式,然后用強(qiáng)大豐富的操作符對(duì)流進(jìn)行處理,使你能以同步編程的方式處理異步數(shù)據(jù), 并組合不同的操作符來(lái)輕松優(yōu)雅的實(shí)現(xiàn)你所需要的功能。
RxJS 是一種針對(duì)異步數(shù)據(jù)流編程工具,或者叫響應(yīng)式擴(kuò)展編程;可不管如何解釋 RxJS 其目 標(biāo)就是異步編程,Angular 引入 RxJS 為了就是讓異步可控、更簡(jiǎn)單。
RxJS 里面提供了很多模塊。這里我們主要給大家講 RxJS 里面最常用的 Observable 和 fromEvent。
目前常見(jiàn)的異步編程的幾種方法:
1、回調(diào)函數(shù) 2、事件監(jiān)聽(tīng)/發(fā)布訂閱 3、Promise 4、Rxjs

8.2 回調(diào)函數(shù)異

創(chuàng)建一個(gè)服務(wù)定義方法:

getCallbackData(cb){
  setTimeout(()=>{
    var data = '張三';
    cb(data);
  },1000)
}

.ts文件

// 2、callback(回調(diào)函數(shù))獲取異步數(shù)據(jù)
this.request.getCallbackData((data)=>{
     console.log(data)
});

8.3 promise方法獲取數(shù)據(jù)

getPromiseData(){
  return new Promise((resolve,reject)=>{
   setTimeout(()=>{
      var data = '李四---promise';
      resolve(data)
   },3000)
 })
}
// 3、Promise方法獲取異步數(shù)據(jù)
var promiseData = this.request.getPromiseData();
promiseData.then((data)=>{
    console.log(data)
})

8.4 rxjs 方法獲取異步方法里面的數(shù)據(jù)及與promise區(qū)別

定義服務(wù):

getRxjsData(){
    return new Observable((observe)=>{
      setTimeout(()=>{
        var data = '李四---Rxjs';
        observe.next(data)
      },3000)
    })
  }

  // 多次執(zhí)行
  getPromiseIntervalData(){
    return new Promise((resolve,reject)=>{
      setInterval(()=>{
        var data = '李四---promise setInterval';
        resolve(data)
      },1000)
    })
  }

  getRxjsDataIntervalData(){
    let count = 0
    return new Observable((observe)=>{
      setInterval(()=>{
        count ++
        var data = '李四---Rxjs'+count;
        observe.next(data)
      },3000)
    })
  }

  getRxjsInterNum(){
    let count = 0
    return new Observable((observe)=>{
      setInterval(()=>{
        count ++
        observe.next(count)
      },3000)
    })
  }

.ts文件使用

// 4、rxjs 方法獲取異步方法里面的數(shù)據(jù)
      // var rxjsData = this.request.getRxjsData();
      // 訂閱
      // rxjsData.subscribe((data)=>{
      //   console.log(data)
      // })

      // 5、rxjs取消訂閱 過(guò)一秒以后撤回剛才的操作
      var streem = this.request.getRxjsData();

      var d = streem.subscribe((data)=>{
        console.log(data)
      })
      setTimeout(()=>{
        // 取消訂閱
        d.unsubscribe();
      },1000)

      // 6、promise執(zhí)行多次(沒(méi)有這個(gè)能力)
      var intervalPromiseData = this.request.getPromiseIntervalData()
      intervalPromiseData.then((data)=>{
        console.log(data)
      })

      // 7、rxjs執(zhí)行多次 (可以執(zhí)行)
      // var streemInter = this.request.getRxjsDataIntervalData();
      // streemInter.subscribe((data)=>{
      //   console.log(data)
      // })

      // 8、用工具方法對(duì)返回的數(shù)據(jù)進(jìn)行處理 filter
      // var streemNuum = this.request.getRxjsInterNum();
      // streemNuum.pipe(
      //   filter((value:number)=>{
      //     if(value%2 == 0){
      //       return true;
      //     }
      //   })
      // ).subscribe((data)=>{
      //   console.log(data)
      // })

      // 9、用工具方法對(duì)返回的數(shù)據(jù)進(jìn)行處理 map
      // var streemNuum = this.request.getRxjsInterNum();
      // streemNuum.pipe(
      //   map((value:number)=>{
      //       return value*3;
      //   })
      // ).subscribe((data)=>{
      //   console.log(data)
      // })

      // 10、結(jié)合使用
      // var streemNuum = this.request.getRxjsInterNum();
      // streemNuum.pipe(
      //   filter((value:number)=>{
      //     if(value%2 == 0){
      //       return true;
      //     }
      //   }),
      //   map((value:number)=>{
      //           return value*3;
      //   })
      // ).subscribe((data)=>{
      //   console.log(data)
      // })
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容