当前位置:  开发笔记 > 前端 > 正文

条件Observable.forkJoin()构建

如何解决《条件Observable.forkJoin()构建》经验,为你挑选了1个好方法。

根据我想要构建forkJoin()方法的函数的参数.

例如:

如果parameter1为空=>不要在forkJoin()中放入http请求

如果parameter2为空=>不要在forkJoin()中放入http请求

码:

getAllByIds(parameter1: any, parameter2: any) {

    let itemList = new Array();

    return Observable.forkJoin(
         this.http.get('rest/fillin/ids/' + parameter1) // don't put this request for parameter1 if it is empty
         .map((res: Response) => res.json()),

         this.http.get('rest/textitem/ids/' + parameter2) // don't put this request for parameter2 if it is empty
         .map((res:Response) => res.json())
    ).map(
        data => {
            itemList.push(data[0]);
            itemList.push(data[1]);
            return itemList;
         }
     );
}

那么,是否有可能像这样建立forkJoin()?



1> martin..:

实际上,这取决于您跳过某些HTTP请求时期望获得的内容.

输出是否应forkJoin()包含null值或完全忽略它?

function mockHTTPRequest(id) {
  return Observable.of(id).delay(100);
}

let parameter1 = 'a';
let parameter2 = false;

let sources = [];
if (parameter1) {
  sources.push(mockHTTPRequest('rest/fillin/ids/' + parameter1));
}
if (parameter2) {
  sources.push(mockHTTPRequest('rest/textitem/ids/' + parameter2));
}

Observable.forkJoin(...sources)
  .map(data => {
    console.log(data.length);
    return data;
  })
  .subscribe(values => console.log(values));

查看现场演示:https://jsbin.com/qorulel/5/edit?js,console

如果parameter1或者parameter2为假,此解决方案不会创建源Observable .请注意,这console.log(data.length)可以从02取决于parameterX值.

或者您可以创建Observable.of(null)而不是HTTP请求.

function mockHTTPRequest(id) {
  return Observable.of(id).delay(100);
}

let parameter1 = 'a';
let parameter2 = false; 

let sources = [
  parameter1 ? mockHTTPRequest('rest/fillin/ids/' + parameter1) : Observable.of(null),
  parameter2 ? mockHTTPRequest('rest/textitem/ids/' + parameter2) : Observable.of(null)
];

Observable.forkJoin(...sources)
  .map(data => {
    console.log(data.length);
    return data;
  })
  .subscribe(values => console.log(values));

查看现场演示:https://jsbin.com/caheno/5/edit?js,console

现在输出总是2个值.其中一些是null.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有