Angular 为什么不能返回forkJoin?

Angular 为什么不能返回forkJoin?,angular,typescript,rxjs,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) ]);} updateWhatever(

我不明白我为什么能这样做

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

updateWhatever(): Observable<[string, string]> {
return forkJoin([
  this.Obs1(),
  this.Obs(2)
]);}
updateWhatever():可观察{
返回叉连接([
这是Obs1(),
本文件为Obs(2)
]);}
然后,如果我执行
service.updateWhatever().subscribe(res=>//handle res[])。
,它会抛出错误

您在预期流的位置提供了一个无效对象。您可以提供一个可观察、承诺、数组或Iterable

为什么这不起作用?人们应该能够以这种方式进行重构。我缺少什么?我意识到它返回了一个可观察的数组,但是为什么函数调用不能处理这个问题呢


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

特定于Rxjs 5或更早版本:

不需要可观测的
数组。它需要类型的源

你必须这样做:

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

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

我同意@Picci comment,我们也可以通过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]);

}

使用RxJs 5.5.2

相关问题:为什么要将数组传递给第二个forkJoin?@Axel有可能返回forkJoin,在您的代码中,问题是ob1和ob2不是可观察的、承诺的、数组的或可测试的。这就是RxJs抛出错误的原因。您能共享ob1和obj2代码吗also@Axel,您使用的是哪个版本的Rxjs?@Axel I have为您添加了一个代码示例。可能这也会得到一些想法。这是不正确的,至少在RxJS 6中是这样的,请注意,forkJoin是用rest参数定义的,而不仅仅是一个普通数组类型参数。在
sources
之前的
表明了这一点。我同意@Picci,我们可以在forkJoin als中传递可观测数组其他都是可观察的。例如
public getItem():Observable
@Axel您使用的是哪个版本的RxJs?