在IT界已經混了5年了,5年中瀏覽了不少的網站,在上面查詢自己想要的東西,解決工作中遇到的問題,心裡總想有天自己能夠有自己的博客,能給分享一些自己在生活中、工作中遇到的問題,讓其他有類似經歷的朋友能夠少走彎路,今天終於鼓起勇氣在博客園寫下第一篇隨筆。其他不做過多的介紹,下麵將介紹今天在工作中遇到的一 ...
在IT界已經混了5年了,5年中瀏覽了不少的網站,在上面查詢自己想要的東西,解決工作中遇到的問題,心裡總想有天自己能夠有自己的博客,能給分享一些自己在生活中、工作中遇到的問題,讓其他有類似經歷的朋友能夠少走彎路,今天終於鼓起勇氣在博客園寫下第一篇隨筆。其他不做過多的介紹,下麵將介紹今天在工作中遇到的一些問題。
項目中用到了Angular5,其中遇到了需要同時發起兩個request查詢結果,這兩個request的結果需要同時返回才能進行後面的邏輯處理,由於js是非同步的,如果僅僅在代碼中按照順序執行,必然會出現一個request先返回,這樣就會出現邏輯上的混亂,得不到想要的結果。通過一番搜索總結使用了Observable中的forkJoin解決了以上問題。具體細節如下:
fetchData0=function(): Observable<any>{ return http.get(url0); } fetchData1=function(): Observable<any>{ return http.get(url1); } let fetchData0 = this.services.fetchData0(); let fetchData1 = this.services.fetchData1(); let source = Observable.forkJoin(fetchData0, fetchData1); source.subscribe( data => { this.logicFetchData0=data[0]; this.logicFetchData1=data[1] },error => { console.log('failure to get data') });此外還可用使用Observable.zip/merge也可以解決這個問題,zip與forkJoin的區別在於zip是串列,forkJoin是並行。其次是zip能夠取得觀察對象中的每一個值,而forkJoin只能取得對象的最後一個值作為返回值。zip的具體使用方式跟上述的forkJoin基本一致,此處就不在闡述。 如果想查詢更多資料可以參考這個鏈接 https://cn.rx.js.org/class/es6/Observable.js~Observable.html#static-method-zip