Как отлаживать наблюдаемые значения в Angular2 / Typescript?

Я следовал учебному пособию для angular 2, и у меня есть функция поиска, которая асинхронно отображает список героев.

<div *ngFor="let hero of heroes | async">
    {{hero.name}}
</div>

В компоненте у меня есть наблюдаемые герои:

heroes: Observable<Hero[]>;

Теперь я реализовал аналогичную функциональность в своем приложении, потому что ничего не вижу и не вижу ошибок. Я открыл отладчик в Chrome и попытался проверить ценность героев, но это, конечно, какая-то Обязательная оболочка.

Есть ли способ увидеть текущее / последнее или какое-либо значение в отладчике или, может быть, есть какой-то другой метод для устранения таких проблем?

7 ответов

Решение

Есть несколько статей на эту тему, но наиболее легко использовать do() оператор, чтобы увидеть, что происходит в цепях вашего оператора.

Прочитайте больше:

В RxJS v6+ tap() оператор заменил do(), Так что теперь это будет выглядеть так:

someObservable$.pipe(
  map(x => x.whatever),
  tap(whatever => console.log(whatever)),
)

Прежде всего, если вы используете машинопись, подумайте:

heroes: Observable<Array<Hero>>;

Если вы хотите распечатать его, вы можете просто добавить в свой код:

heroes.subscribe((v) => console.log('got new heroes list: ', v));

Поскольку в моем опыте отладки мне требовалось больше информации, чем вы можете войти с помощью tapоператор, я написал для этого библиотеку 1log :

      import { log } from '1log';
import { timer } from 'rxjs';

timer(500).pipe(log).subscribe();

Вы можете использовать .pipe() для регистрации, как показано.

      constructor(
    private variable: Variable<any>
  ) {
    this.field= this.variable.select<any>(state => state.field).pipe(
        tap(Value => console.log('Field: ', Value ))
    );
  }

Вы можете использовать оператор do() EX:

this.http
        .get('someUrl', options)
        .map(res => res.json())
        .do(
            data => {
                console.log(data);
            },
            error => {
                console.log(error)
            }
        )

Если внутри функций do() ничего не происходит, это означает, что вы не подписаны на это наблюдаемое, помните, что наблюдаемые ожидают подписки, чтобы начать что-то делать.

Если вы хотите сделать некоторые console.log отлаживая, я написал маленький помощник logValues() в s-rxjs-utils, Вы можете использовать это так (из документов):

of(1, 2).pipe(logValues()).subscribe();
// prints using console.log:
// [value] 1
// [value] 2
// [complete]

Вы также можете передать ей строку для печати вместе со значениями и указать уровень журнала.

Другие вопросы по тегам