Angular 8 Pipe - переменная не определена вне подписки - PullRequest
0 голосов
/ 02 февраля 2020

Как я могу получить доступ к переменной внутри подписки в angular канале для возврата преобразованного значения?

Что я пробовал

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;
}

the newValue переменная не определена в этом примере. Как я могу получить их, чтобы вернуть новое значение для канала вне этой подписки?

1 Ответ

1 голос
/ 02 февраля 2020

Вы хотите получать асинхронно данные как синхронно. Это не сработает.

В вашей трубе вы должны вернуть наблюдаемое значение. В этом случае вы изменяете свои данные в операторе map Rx js, а не в подписке.

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

...