繁体   English   中英

我尝试在 Typescript 中应用过滤器时出错

[英]Error when I tried to apply filter in Typescript

我有一个对象列表,我想根据特定的字符串属性对其进行过滤。

 openTasks: Task[]; //Initial list
 inProgressTasks: Task[] = []; //Filtered list

getTasks(): void {
    this.activatedRoute.paramMap.subscribe(params => {
      this.projectId = +params.get('projectId');

      if (this.projectId === 0) {
        this.taskService.getTasks().subscribe(tasks => this.openTasks = tasks); 
        // HERE I ACQUIRE LIST OF OPEN TASKS
      } else {
        this.taskService.getTaskByProjectId(this.projectId).subscribe(tasks => this.openTasks = tasks);
       // HERE I ACQUIRE LIST OF OPEN TASKS
      }

      // FILTER
      this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');

    });
  }

我收到此错误:

ERROR TypeError: Cannot read property 'filter' of undefined

你能帮我解决这个错误吗?

由于您获取 openTasks 的异步性质,您可能在这里遇到了问题。

在尝试过滤之前尝试等待它确定完成。

getTasks(): void {
    this.activatedRoute.paramMap.subscribe(params => {
      this.projectId = +params.get('projectId');

      if (this.projectId === 0) {
        this.taskService.getTasks().subscribe(tasks => 
            {this.openTasks = tasks},
            error => {},
            () => { this.filterTasks()}
        );         
      } 

    });
  }
filterTasks() {
    this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');
}

this.openTasks尚未设置。 它仅在subscribethis.openTasks = tasks之后设置。 这应该有效。

this.activatedRoute.paramMap.subscribe(params => {
      this.projectId = +params.get('projectId');

      if (this.projectId === 0) {
        this.taskService.getTasks()
                  .subscribe(tasks => {
                           this.openTasks = tasks;
                           // your code that requirest openTasks
                           this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');
                           });
      } else {
        this.taskService.getTaskByProjectId(this.projectId)
                        .subscribe(tasks => {
                           this.openTasks = tasks
                           // your code that requirest openTasks
                           this.inProgressTasks = this.openTasks.filter(task => task.state === 'IN_PROGRESS');
                         });
      }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM