В чем разница?
Как вы видите в своем примере, основное отличие заключается в улучшении читабельности исходного кода. В вашем примере всего две функции, но представьте, есть ли их дюжина? тогда это будет как
function1().function2().function3().function4()
это действительно становится уродливым и трудным для чтения, особенно когда вы заполняете внутренние функции. Вдобавок к этому некоторые редакторы, такие как код Visual Studio, не допускают длины более 140 строк. но если это пойдет следующим образом.
Observable.pipe(
function1(),
function2(),
function3(),
function4()
)
Это значительно улучшает читаемость.
Если нет разницы, почему существует функциональная труба?
Функция PIPE () предназначена для объединения все функции, которые принимают и возвращают наблюдаемое. Первоначально он принимает наблюдаемый объект, затем этот наблюдаемый объект используется во всей функции pipe () каждой функцией, используемой внутри него.
Первая функция принимает наблюдаемый объект, обрабатывает его, изменяет его значение и переходит к следующей функции, затем следующая функция принимает наблюдаемый выход первой функции, обрабатывает его и переходит к следующей функции, затем продолжается до тех пор, пока все функции внутри функции pipe () используйте это наблюдаемое, наконец, у вас есть обработанный наблюдаемый. В конце вы можете выполнить наблюдаемый объект с помощью функции subscribe (), чтобы извлечь из него значение. Помните, что значения в исходном наблюдаемом не меняются. !!
Почему этим функциям нужен другой импорт?
Импорт зависит от того, где функция указана в пакете rxjs. Это так. Все модули хранятся в папке node_modules в Angular. импортировать {класс} из "модуля";
В качестве примера возьмем следующий код. Я только что написал это в stackblitz. Таким образом, ничего не создается автоматически и не копируется откуда-то еще. Я не вижу смысла копировать то, что указано в документации rxjs, когда вы тоже можете пойти и прочитать это. Я предполагаю, что вы задали этот вопрос здесь, потому что не поняли документацию.
- Существуют классы pipe, observable, of, map, импортированные из соответствующих модулей.
- В теле класса я использовал функцию Pipe (), как показано в коде.
Функция Of () возвращает наблюдаемый объект, который последовательно выдает числа при подписке.
Observable еще не подписан.
Когда вы использовали его как Observable.pipe (), функция pipe () использует данный Observable в качестве входных данных.
Первая функция, функция map (), использует этот Observable, обрабатывает его, возвращает обработанный Observable обратно в функцию pipe (),
затем обработанный Observable передается следующей функции, если таковая имеется,
и так продолжается до тех пор, пока все функции не обработают Observable,
в конце, что Observable возвращается функцией pipe () переменной, в следующем примере его obs.
Теперь дело в Observable: пока наблюдатель не подписался на него, он не выдает никакого значения. Поэтому я использовал функцию subscribe (), чтобы подписаться на этот Observable, как только я подписался на него. Функция of () начинает выдавать значения, затем они обрабатываются функцией pipe (), и в конце вы получаете окончательный результат, например, 1 берется из функции of (), 1 добавляется 1 в функции map (), и вернулся обратно. Вы можете получить это значение в качестве аргумента внутри функции subscribe (function ( argument ) {}).
Если вы хотите его распечатать, используйте как
subscribe( function (argument) {
console.log(argument)
}
)
import { Component, OnInit } from '@angular/core';
import { pipe } from 'rxjs';
import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent implements OnInit {
obs = of(1,2,3).pipe(
map(x => x + 1),
);
constructor() { }
ngOnInit(){
this.obs.subscribe(value => console.log(value))
}
}
https://stackblitz.com/edit/angular-ivy-plifkg
pipe()
вам передавать операторы, которые вы создаете?