如何在函数内正确组合可观察/订阅流与同步

时间:2017-02-06 04:21:25

标签: angular rxjs

这种流程的正确方法是什么? BarService有一个返回布尔值的函数。该函数或者计算结果本身,或者它可能取决于FooService中可观察调用的结果。

我期待测试结果为真,但未定义。

foo.service.ts

doObservableThing(): Observable<boolean> {
  return Observable.of(true);
}

bar.service.ts

doThing(): boolean {
  if (someCondition) { // will be true for the test below
    this.fooService.doObservableThing().subscribe(
      () => { return true; }, 
      () => { return false; });
  } else {
    return false;
  }
}

bar.service.spec.ts

it('should return true', () => {
  let result = barService.doThing();
  expect(result).toBe(true); // result is undefined
});

1 个答案:

答案 0 :(得分:1)

试试这个:

doThing(): Observable<boolean> {
  if (someCondition) { // will be true for the test below
        return this.fooService.doObservableThing().map(() => true);
     } else {
        return Observable.of(false);
     }
}