Как передать данные из tap () в takewhile () - PullRequest
2 голосов
/ 20 июня 2019

Я хочу построить функцию для проверки правильности введенных данных.

Ниже приведен мой код, который будет иметь функции map() и take(), чтобы гарантировать, что функция проверки не будет выполняться более 10 раз.

Я пытаюсь запустить chk_data_status(), чтобы вернуть статус с помощью tap() и вернуть этот статус на takeWhile(), чтобы вся функция остановилась, если статус не находится в статусе. «Обработка» ».

Но проблема в том, что функция takeWhile() получает значение count из функции map() и take() вместо res.status из tap().

const count = 10
timer(5000, 1000)
    .pipe(
        map(i => count- i),
        take(count + 1),
        tap(async () => {
            let res: any = await this.chk_data_status(id); // return as a Promise
            console.log(res.status);
            return res.status;
        }),
        takeWhile((status: any) => {
            console.log(status);
            return status!= 'Processing';
        }),
        finalize(() => doSomething())
    ).subscribe();

1 Ответ

3 голосов
/ 20 июня 2019

оператор нажатия не возвращает значение, а передает все, что было получено, следовательно, вы получаете то, что на карте. Просто замените тап на карту, и ваш takeWhile () получит статус.

Также вместо использования async и wait, почему бы вам просто не передать ваш запрос, как показано ниже,

const count = 10
timer(5000, 1000)
 .pipe(
   map(i => count- i),
   take(count + 1),
   mergeMap(_ => this.chk_data_status(id).pipe(map( res =>  res.status))),
   takeWhile((status: any) => {
     console.log(status);
     return status!= 'Processing';
  }),
  finalize(() => doSomething())
).subscribe();

Но затем убедитесь, что this.chk_data_status(id) возвращает наблюдаемое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...