第一次发干货Observable.zip与Observable.forkJoin

  在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
 

posted on 2018-07-13 22:00  telnetme  阅读(856)  评论(0编辑  收藏  举报

导航