Angular 8 Pipe-订阅外部未定义变量

时间:2020-02-02 12:19:29

标签: angular typescript subscription

如何在有角管道中的订阅中访问变量以返回转换后的值?

我尝试过的事情

transform(value: any, ...args: any[]): any {

  const clientKey = args[0];
  let arr = [];
  let newValue;


  this.dbJobs.getJobsFromKey(clientKey).pipe(take(1)).subscribe(jobs => {
    if (jobs && jobs.length) {

      jobs.forEach((job) => {
        arr.push(job.time);
      });
    }
    newValue = arr.reduce((a, b) => {
      return a + b;
    }, 0);

    return newValue;
  });

  return newValue;
}

在此示例中未定义newValue变量。我如何检索它们以返回此订阅外部管道的新值?

1 个答案:

答案 0 :(得分:1)

您要像异步获取异步数据一样。那是行不通的。

在管道中,您应该返回Observable值。在这种情况下,您可以在map Rxjs运算符中而不是在subscribe中修改数据。

transform(value: any, ...args: any[]): any {

  const clientKey = args[0];
  let arr = [];
  let newValue;


  return this.dbJobs.getJobsFromKey(clientKey)
    .pipe(
      take(1),
      map(jobs => {
    if (jobs && jobs.length) {

      jobs.forEach((job) => {
        arr.push(job.time);
      });
    }
    newValue = arr.reduce((a, b) => {
      return a + b;
    }, 0);

    return newValue;
  }));
}

当您要在模板中使用此管道时,必须将其与AsyncPipe

连接

例如:data | yourPipe | async