如何将函数动态传递给 angular forkJoin()?

How to pass functions dynamically to angular forkJoin()?

我正在向 sources 数组动态传递两个函数,但是当只传递一个函数时我遇到了问题。

如何模拟空的 observable,因此如果传递给第二个函数而不是将其映射到 a,而是映射到 b。

 let sources = [];
    if (!isNullOrUndefined(email_address)) {
      sources.push(this.commonService.lookUpEmailAddress(emailParameters));
    }
    if (!isNullOrUndefined(telephone_number)) {
      sources.push(this.commonService.lookUpTelephoneNumber(telephoneParameters));
    }
   
    forkJoin(...sources)
      .subscribe(
      ([a, b]) => { // do stuff here }
    

你总是可以有两个 observable,有些像

sources=[
!isNullOrUndefined(email_address)?
          this.commonService.lookUpEmailAddress(emailParameters):
          of(null),
!isNullOrUndefined(telephone_number)?
          this.commonService.lookUpTelephoneNumber(telephoneParameters):
          of(null)
]

然后在订阅中检查 a==null 或 b==null

您可以传递一个包含数组的变量,而不是显式数组 [a, b]。尝试以下

forkJoin(...sources).subscribe(
  (response) => { 
    // response[0] - a - result from 1st observable in sources
    // response[1] - b - result from 2nd observable in sources (don't access response[1] if there is no 2nd observable)
  }
);

现在您可以访问已知存在的结果元素。例如。如果 sources 数组中没有第二个元素,则 response[1] 未定义。