在 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
来源: https://www.cnblogs.com/jian1111/p/9307610.html