Почему он передает console.log как аргумент функции подписки Observble ()?

Я довольно новичок в угловом и функциональном программировании, и у меня есть сомнения по поводу этого синтаксиса (который, я думаю, должен быть связан с поведением функционального программирования):

courses$: Observable<{}[]>;
.................................
.................................
.................................
this.courses$.subscribe(console.log);

Поэтому курсы $ должны быть массивом Observable (что именно означает синтаксис <{} []>?)

Кажется, последняя строка выводит на консоль JavaScript подписанный контент. Но что именно означает этот синтаксис? Я знаю, что console.log() - это функция, которая принимает в качестве аргумента значение, которое должно быть напечатано. Почему в этом случае он является аргументом функции подписки и не заканчивается на ()?

3 ответа

Чтобы лучше понять это: в JavaScript функции являются объектами первого класса, что означает, что они могут рассматриваться как обычные переменные, передаваться как аргументы, изменяться или удаляться. Взгляните на это:

something => console.log(something)

Как видите, это функция, которая записывает что-то на консоль. И что console.log? Ну, это функция, которая записывает что-то на консоль, ничем не отличается!

Рассмотрим этот псевдокод:

Observable.prototype.subscribe = function(callback) {
   // every time a new value is emitted 
   callback(newValue);
}

Конечно, это не так, как .subscribe Метод реализован на самом деле, но это, по сути, то, что он делает: когда наблюдаемая получает новый фрагмент данных, она вызывает обратный вызов, который вы предоставили, передавая next значение в качестве первого аргумента для этого обратного вызова. Надеюсь, это прояснит для вас.

Это проходит console.log, ссылка на функцию, в subscribe, Подписаться будет вызывать эту функцию позже, когда будет опубликована подписка. Аргумент (ы), которые он передает, определяются по подписке в тот момент, когда он срабатывает. Это просто передача функции обратного вызова в подписку.

subscribe принимает функцию в качестве аргумента типа (parameter: T) => voidгде Т - шаблон Observable<T>,

эти три работают аналогично:

this.courses$.subscribe(console.log);
this.courses$.subscribe(function (p: {}[]): void { console.log(p); });
this.courses$.subscribe((p: {}[]): void => console.log(p));

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

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