有什么区别?
正如您在示例中看到的,主要区别在于提高源代码的可读性。您的示例中只有两个函数,但想象一下如果有十几个函数?然后它会像
function1().function2().function3().function4()
它真的变得丑陋且难以阅读,尤其是当您在函数内部填充时。除此之外,某些编辑器(如 Visual Studio 代码)不允许超过 140 行长度。但如果它像下面这样。
Observable.pipe(
function1(),
function2(),
function3(),
function4()
)
这大大提高了可读性。
如果没有区别,为什么存在函数管道?
PIPE() 函数的目的是将所有接受并返回 observable 的函数汇总。它最初需要一个可观察对象,然后在其中使用的每个函数在整个 pipe() 函数中使用该可观察对象。
第一个函数获取 observable,处理它,修改它的值,然后传递给下一个函数,然后下一个函数获取第一个函数的输出 observable,处理它,然后传递给下一个函数,然后继续直到pipe() 函数内部的所有函数都使用该 observable,最后你得到了处理后的 observable。最后,您可以使用 subscribe() 函数执行 observable 以从中提取值。请记住,原始 observable 中的值没有改变。!!
为什么这些函数需要不同的导入?
导入取决于在 rxjs 包中指定函数的位置。
它是这样的。所有模块都存储在 Angular 的 node_modules 文件夹中。
从“模块”导入{类};
我们以下面的代码为例。我刚刚在stackblitz中写了它。因此,不会自动生成任何内容,也不会从其他地方复制任何内容。当您也可以阅读时,我看不出复制 rxjs 文档中所述内容的意义。我假设您在这里问了这个问题,因为您不了解文档。
- 有从
各自的模块。
- 在类的主体中,我使用了 Pipe() 函数
如代码所示。
Of() 函数返回一个 observable,即
订阅时按顺序发出数字。
Observable 尚未订阅。
当您像使用 Observable.pipe() 一样使用它时,pipe() 函数使用给定的 Observable 作为输入。
第一个函数,map() 函数使用该 Observable,对其进行处理,将处理后的 Observable 返回给 pipe() 函数,
那么处理过的 Observable 如果有的话就交给下一个函数,
就这样继续下去,直到所有函数都处理完 Observable,
最后,通过 pipe() 函数将 Observable 返回给变量,在以下示例中为 obs。
现在 Observable 中的内容是,只要观察者没有订阅它,它就不会发出任何值。所以我使用 subscribe() 函数订阅了这个 Observable,然后我一订阅它。 of() 函数开始发射值,然后通过 pipe() 函数进行处理,最后得到最终结果,例如从 of() 函数中取出 1,在 map() 函数中加 1,并返回。您可以将该值作为 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