调用可能会或可能不会发出http请求的函数

时间:2018-09-06 16:03:19

标签: angular typescript rxjs

我有看起来像这样的功能。

myFunction() {
  //some logic
  if (expression) {
    return value;
  }

  Observable.forkJoin(
    service.someHttpGet,
    service.anotherHttpGet
  ).subscribe((data) => {
    //some logic
    return value;
  });
}

请注意,如果表达式为true,则函数将立即返回一个值。否则,退货可能会有所延迟。所以当我写

const x=myFunction();
如果expression为true,则

x将具有数据,否则为undefined。我需要能够调用此函数并等待结果被延迟。我该怎么办?

1 个答案:

答案 0 :(得分:3)

如果函数的返回值取决于至少一个Observable,则函数的返回类型也必须为Observable或至少为Promise。当然,这会改变函数的用法,但是没有其他选择。

You can read more about basic JavaScript callbacks here

您的代码将被修改为:

myFunction(): Observable<any> {
  if (expression) {
    return Observable.of(value);
  }

  return Observable.forkJoin(
    service.someHttpGet,
    service.anotherHttpGet
  ).pipe(
      map(values => //here you'll modify the values and return the result)
  );
}

使用方法:

myFunction().subscribe(val => x = val);