Angular rxjs异步数组未定义

科里

有一个newData数组和forkJoin带有两种方法的rxjs运算符。我试图填充其中的数组getNewData()以便在forkJoin订阅中使用它,但是它仍然是未定义的。getNewData()为了在forkJoin订阅中使用newData数组,哪种方法合适

    newData = [];
    
    forkJoin(
      this.method1();
      this.method2()
    ).subscribe({ data1, data2 }) => {
       const filteredData = data1.filter(item => item.id === model.id);
       this.getNewData(filteredData);

       console.log(this.newData) => undefined

       // wait for this.newData?
    }

    // Observable
    getNewData(filteredData) {
      return this.API('GET', `data/${filteredData.id}`).pipe(map((resp: any) => {
          this.newData = resp;
        }));
    }
迈克尔·D

您正在尝试不鼓励使用嵌套订阅。

如果调用完全相互独立,则可以将this.API('GET', 'data')call作为第三个参数附加forkJoin函数中。

import { forkJoin } from 'rxjs';

newData = [];

forkJoin(
  this.method1(),
  this.method2(),
  this.API('GET', `data`)
).subscribe([ data1, data2, newData ]) => {
  const filteredData = data1.filter(item => item.id === model.id);
  this.newData = newData;
  console.log(this.newData);
}

或者,如果API调用某种程度上取决于前两种方法中的数据,那么您可以使用RxJS高阶映射运算符之一,例如switchMap

import { forkJoin } from 'rxjs';
import { swithcMap } from 'rxjs/operators';

newData = [];

forkJoin(
  this.method1(),
  this.method2()
).pipe(
  switchMap(([data1, data2]) => {
    const filteredData = data1.filter(item => item.id === model.id);
    return this.getNewData(filteredData);
  })
).subscribe(newData => {
  this.newData = newData;
  console.log(this.newData);
}

getNewData (filteredData): Observable<any> {
  return this.API('GET', `data/${filteredData.id}`).pipe(
    map((resp: any) => {
      this.newData = resp;
    })
  );
}

更新(根据OP的更新)

  1. 您希望使用forkJoin另一个HTTP调用内部的输出然后,您需要switchMap如图所示进行操作。

  2. (与问题无关)更新原始帖子中的内容时,请尝试提供这样的注释。它使您更容易理解您的意图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

未定义HotTowel Angular Breeze配置

来自分类Dev

未定义Angular HotTowel -datacontext

来自分类Dev

未定义Angular JS服务

来自分类Dev

Angular2 + RxJS-无法读取未定义的下一个属性

来自分类Dev

如何在Angular中为异步HTTP服务设置回调,以便可以在我的控制器中填充数组而不会被未定义?

来自分类Dev

Angular2'this'未定义

来自分类Dev

Angular2-未定义OnInit

来自分类Dev

未定义localStorage(Angular Universal)

来自分类Dev

错误$在Angular Universal中未定义

来自分类Dev

在异步验证器中调用时,Angular服务始终未定义

来自分类Dev

ctx。在Angular中未定义

来自分类Dev

angular.identity未定义

来自分类Dev

Angular工厂中未定义的“ this”

来自分类Dev

Angular $ resource新实例未定义

来自分类Dev

Angular JS函数未定义错误

来自分类Dev

如何在Angular中为异步HTTP服务设置回调,以便可以在我的控制器中填充数组而不会被未定义?

来自分类Dev

Angular 2 ContentChild未定义

来自分类Dev

Angular Typeahead结果显示未定义

来自分类Dev

Angular JS Factory变量未定义

来自分类Dev

Angular无法读取未定义的属性

来自分类Dev

Angular js未定义的函数

来自分类Dev

参数未定义的 Angular 2 路由

来自分类Dev

Angular 4 - 嵌套的 @ViewChild 未定义

来自分类Dev

Angular 5 Promise 返回未定义

来自分类Dev

angular 5 项目中的数组未定义,但不是

来自分类Dev

Angular - Redux Thunk AppState 未定义

来自分类Dev

Angular 6 模块 - 角度未定义

来自分类Dev

Angular 2 this.data 未定义

来自分类Dev

Angular 7 Observer 未定义