在Observables forkJoin文档中,它说args可以是数组,但没有列出这样做的示例:

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/forkjoin.md

我try 了一个类似于我下面列出的函数,但出现了一个错误:

:3000/angular2/src/platform/browser/browser_adapter.js:76 

EXCEPTION: TypeError: Observable_1.Observable.forkJoin is not a function

下面是我函数的剪切版本:

processStuff( inputObject ) {
  let _self = this;

  return new Observable(function(observer) {
    let observableBatch = [];

    inputObject.forEach(function(componentarray, key) {
      observableBatch.push(_self.http.get(key + '.json').map((res: Response) => res.json()));
    });

    Observable.forkJoin(
      observableBatch
    // );
    ).subscribe(() => {
      observer.next();
      observer.complete();
    });

  });
}

我的问题的根源是关于在按照这里的要求继续进行之前要结束的循环:Angular2 Observable - how to wait for all function calls in a loop to end before proceeding?

但我还没有完全掌握forkJoin与数组的正确用法和正确语法.

我非常感谢你能提供的帮助.

注:第三个函数返回一个可观察的

thirdFunction() {
  let _self = this;

  return Observable.create((observer) => {
  // return new Observable(function(observer) {
    ...

    observer.next(responseargs);
    observer.complete();
  });
}

processStuff(inputObject) {
  let _self = this;
  let observableBatch = [];

  inputObject.forEach((componentarray, key) => {
    observableBatch.push(_self.thirdFunction().map((res: Response) => res.json()));
  });

  return Observable.forkJoin(observableBatch);
}

elsewhere() {
  this.processStuff(inputObject)
    .subscribe()
}

推荐答案

您需要导入默认情况下未加载的运算符.这就是EXCEPTION Observable.xxxx is not a function通常的意思.您可以通过将完整rxjs添加到 bootstrap 数据库来导入所有运算符,例如:

import 'rxjs/Rx'

或者通过导入特定运算符(在您的情况下):

import 'rxjs/add/observable/forkJoin'

关于代码的另一个观察/建议是:try 使用一种语法.你在混合es5,es6,打字脚本...虽然它在起作用,但从长远来看,它只会让你感到困惑.此外,如果你刚刚开始观察,尽量避免new Observable(),而是使用创建操作符;

processStuff( inputObject ) {
  let observableBatch = [];

  inputObject.forEach(( componentarray, key ) => {
    observableBatch.push( this.http.get( key + '.json').map((res: Response) => res.json()) );
  });

  return Observable.forkJoin(observableBatch);
}

elsewhere() {
  this.processStuff( inputObject )
    .subscribe()
}

最后,请参考正确的文档-Angular2使用RxJS v5,您提供的链接用于RxJSv4.v5的文档仍然不完整,但是您可以在许多源文件中找到描述.

Angular相关问答推荐

将Angular 17中的http服务与独立组件一起使用

带有服务依赖的Angular测试类

对子router-outlet 应用主机样式

要素存储更改根存储状态

我正在try 将一个带有模块联盟的Angular 8项目expose 到另一个Angular 项目,Angular 是15,这可能吗?如果是这样,有什么建议吗?

如何在 Angular 中每 x 秒从 REST api 加载数据并更新 UI 而不会闪烁?

我的验证器收到一个始终为空的可观察值

Angular 15 Ref 错误:初始化前无法访问组件 A

从 Angular 应用程序中删除散列标签后无法从 Apache 访问 API

nx workspace angular monorepo 在创建新应用程序时抛出错误

Angular 按钮指令错误地附加子元素

在 kubernetes 上创建 Ingress 服务以将 springboot [后端] 连接到前端 [angular]

多个 Mat Paginator 在 Angular 组件中不起作用

material Angular手风琴header/title高度

没有 ChildrenOutletContexts 的提供者 (injectionError)

Firestore 从集合中获取文档 ID

RxJS - 发生错误时观察到的不会完成

IE11中的Angular4应用程序运行问题

Angular2:子组件访问父类变量/函数

RXJS observable 上的 .pipe() 和 .subscribe() 方法之间的区别