为什么无法返回forkJoin?

时间:2018-10-30 06:38:12

标签: angular typescript rxjs

我不明白为什么可以做

ForkJoin(service.Obs1(), service.Obs2()).subscribe

但是,如果我重构代码,以便向服务类添加一个返回ForkJoin(this.Obs1(), this.Obs2())的方法,例如

updateWhatever(): Observable<[string, string]> {
return forkJoin([
  this.Obs1(),
  this.Obs(2)
]);}

然后如果我执行service.updateWhatever().subscribe(res => //handle res[].,则会引发错误

  

You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable

为什么不起作用?一个人应该能够以这种方式进行重构。我想念什么?我意识到它正在返回一个可观察对象数组,但是为什么函数调用不能处理此问题?

也许我的问题是,如何处理一个返回forkJoin的方法?

2 个答案:

答案 0 :(得分:2)

特定于Rxjs 5或更早版本:

forkJoin 不希望有Array的可观察值。它需要类型为 SubscribableOrPromise

的来源

您必须这样做:

updateWhatever() {
  return forkJoin(
    this.Obs1(),
    this.Obs(2)
  );
}

答案 1 :(得分:0)

可能会返回forkJoin。在您的代码中,问题是 Obs1 Obs2 不是可观察的,承诺的,数组或可迭代的。这就是rxjs引发错误的原因

我同意@Picci评论,我们也可以在 forkJoin 中传递可观察的数组

示例代码

const a = stream('a', 200, 3, 'partial');
const b = stream('b', 500, 3, 'partial');

someMethod().subscribe((response)=>{
  console.log(response);
});

someMethodFkAsAnArray().subscribe((response)=>{
  console.log(response);
});


function someMethod(){
  return forkJoin(a, b);
}

function someMethodFkAsAnArray(){
  return forkJoin([a, b]);

}

StackBlitz Demo使用RxJ 5.5.2