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