2

我不明白为什么我能做到

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 的方法?

4

2 回答 2

2

特定于 Rxjs 5 或更早版本:

forkJoin不期望一个ArrayObservable(s)。它需要类型的来源SubscribableOrPromise

你必须这样做:

updateWhatever() {
  return forkJoin(
    this.Obs1(),
    this.Obs(2)
  );
}
于 2018-10-30T08:01:43.747 回答
1

可以返回一个 forkJoin。在您的代码中,问题是Obs1Obs2不是可观察的、承诺的、数组或可迭代的。这就是 rxjs 抛出错误的原因。

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

示例代码

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]);

}

使用 RxJs 5.5.2的 StackBlitz 演示

于 2018-10-30T16:03:22.853 回答