結合RxJS + AngularJS實現非同步處理
Angular.js的Promise API提供了非同步處理,但是AngularJS只有很少的非同步處理庫支援,如果你寫複雜的非同步處理功能,需要自己編寫庫包。而Reactive Extensions for JavaScript (RxJS)則提供強大的reactive非同步處理。
RxJS中新增了Observable.fromPromise功能,實現RxJS和AngularJS Promise銜接。
簡單比較:
AngularJS Promise:
RxJS:
更復雜一些程式碼,需要呼叫更多功能:
AngularJS Promise:
RxJS:
RxJS更強大的功能,重試幾次連線:
壓縮:
RxJS中新增了Observable.fromPromise功能,實現RxJS和AngularJS Promise銜接。
簡單比較:
AngularJS Promise:
var res = $resource("/hoge"); res.get().$promise .then( function(data){ alert("success: " + data); }, function(err){ alert("failure: " + err); } ); <p class="indent"> |
RxJS:
var res = $resource("/hoge"); Rx.Observable.fromPromise(res.get().$promise) .subscribe( function(data){ alert("success: " + data); }, function(err){ alert("failure: " + err); } ); <p class="indent"> |
更復雜一些程式碼,需要呼叫更多功能:
AngularJS Promise:
var res1 = $resource("/hoge"); var res2 = $resource("/fuga/:id"); res1.get().$promise .then(function(data){ return res2.get({id: data.id}).$promise; }) .then( function(data){ alert("success: " + data); }, function(err){ alert("failure: " + err); } ); <p class="indent"> |
RxJS:
var res1 = $resource("/hoge"); var res2 = $resource("/fuga/:id"); Rx.Observable.fromPromise(res1.get().$promise) .selectMany(function(data){ return Rx.Observable.fromPromise(res2.get({id: data.id}).$promise); }) .subscribe( function(data){ alert("success: " + data); }, function(err){ alert("failure: " + err); } ); <p class="indent"> |
RxJS更強大的功能,重試幾次連線:
var res = $resource("/hoge") Rx.Observable.defer(function(){ return Rx.Observable.fromPromise(res.get().$promise); }) .retry(3) .subscribe( function(data){ alert("success: " + data); }, function(err){ alert("failure: " + err); } ); <p class="indent"> |
壓縮:
var res1 = $resource("/hoge"); var res2 = $resource("/fuga"); Rx.Observable.fromPromise(res1.get().$promise) .zip(Rx.Observable.fromPromise(res2.get().$promise), function(data1, data2){ return [data1, data2]; } ) .subscribe( function(data){ alert("success: " + data[0] + ":" + data[1]); }, function(err){ alert("failure: " + err); } ); <p class="indent"> |
相關文章
- angularJS結合canvas實現的畫圖程式碼例項AngularJSCanvas
- 如何使用angularjs實現ajax非同步請求AngularJS非同步
- Gearman實戰第一彈:非同步處理結算單非同步
- 使用benjamin-batchly實現Rust非同步批處理 - alexhereticBATRust非同步
- 雲原生最佳實踐系列 7:基於 OSS Object FC 實現非結構化檔案實時處理Object
- AngularJS – 如何處理 XSS 漏洞AngularJS
- AngularJS中處理多個promiseAngularJSPromise
- 線上MYSQL同步報錯故障處理總結MySql
- python中非同步非阻塞如何實現Python非同步
- 購物車的實現及結算處理
- php多程式結合Linux利器split命令實現把大檔案分批高效處理PHPLinux
- 影片直播系統原始碼,非同步處理實現程式碼分析原始碼非同步
- PHP 結合 MySQL 千萬級資料處理PHPMySql
- jieba與nltk結合處理評論(一)Jieba
- 線上MYSQL同步報錯故障處理方法總結MySql
- CoLAKE: 如何實現非結構性語言和結構性知識表徵的同步訓練
- laravel cdn 結合七牛雲實現檔案自動同步功能Laravel
- 非同步處理方法非同步
- 非同步流程處理非同步
- JavaScript | 非同步處理JavaScript非同步
- Java後端中的請求最佳化:從請求合併到非同步處理的實現策略Java後端非同步
- mysql,出現同步停止的錯誤的處理MySql
- Asynq 實現 Go 後臺作業非同步定時任務處理Go非同步
- 架構設計 | 非同步處理流程,多種實現模式詳解架構非同步模式
- centos(php7)下gearman實現非同步處理佇列任務CentOSPHP非同步佇列
- RxJava如何結合觀察者與鏈式處理RxJava
- 樹形結構的處理——組合模式(五)模式
- 樹形結構的處理——組合模式(四)模式
- 樹形結構的處理——組合模式(三)模式
- 樹形結構的處理——組合模式(二)模式
- 樹形結構的處理——組合模式(一)模式
- 結合 AOP 輕鬆處理事件釋出處理日誌事件
- Netty之非阻塞處理Netty
- Spring Boot和Apache Kafka結合實現錯誤處理,訊息轉換和事務支援?Spring BootApacheKafka
- ES6 系列之非同步處理實戰非同步
- ES6系列之非同步處理實戰非同步
- js中非同步處理JS非同步
- Laravel 事件&非同步處理Laravel事件非同步