Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular async运算符和订阅observable之间有什么区别?_Angular_Typescript_Rxjs_Observable_Ngrx - Fatal编程技术网

Angular async运算符和订阅observable之间有什么区别?

Angular async运算符和订阅observable之间有什么区别?,angular,typescript,rxjs,observable,ngrx,Angular,Typescript,Rxjs,Observable,Ngrx,我对Angular、RxJs和Ngrx都是新手 我知道我们认同一种可观察的观点,并观察变化。我在Ngrx中遇到了这个代码 问题是,它到底是什么?它与订阅可观察对象有何不同?什么时候使用一个和什么时候使用另一个?正如@jornsharpe所提到的,这其实并没有什么不同。在引擎盖下,异步管道将创建一个订阅并存储最新的值,这与您想要订阅并显示结果时需要执行的操作相同 当指令中的组件被销毁时,异步管道还将负责取消对可观察组件的订阅 在变化检测方面,它可能稍微更有效一些,但我不确定 然而,大多数情况下,它

我对Angular、RxJs和Ngrx都是新手

我知道我们认同一种可观察的观点,并观察变化。我在Ngrx中遇到了这个代码


问题是,它到底是什么?它与订阅可观察对象有何不同?什么时候使用一个和什么时候使用另一个?

正如@jornsharpe所提到的,这其实并没有什么不同。在引擎盖下,异步管道将创建一个订阅并存储最新的值,这与您想要订阅并显示结果时需要执行的操作相同

当指令中的组件被销毁时,异步管道还将负责取消对可观察组件的订阅

在变化检测方面,它可能稍微更有效一些,但我不确定


然而,大多数情况下,它只是为了方便使用。使用异步管道的代码比创建一个组件变量并在组件的onInit或构造函数中订阅它,然后跟踪订阅以取消订阅的代码要少。

正如@jonrsharpe所提到的,这其实并没有什么不同。在引擎盖下,异步管道将创建一个订阅并存储最新的值,这与您想要订阅并显示结果时需要执行的操作相同

当指令中的组件被销毁时,异步管道还将负责取消对可观察组件的订阅

在变化检测方面,它可能稍微更有效一些,但我不确定


然而,大多数情况下,它只是为了方便使用。使用异步管道的代码比创建组件变量并在组件的onInit或构造函数中订阅它,然后跟踪订阅以取消订阅的代码要少。

异步管道更干净

data$ = this.service.data$;
在模板中

{{data$ | async}}
{{data}}
vs必须管理订阅

ngOnInit() {
  this.sub = this.service.data$.subscribe(data => { this.data = data });
}

ngOnDestroy() {
  this.sub.unsubscribe();
}
在模板中

{{data$ | async}}
{{data}}

异步管道更干净

data$ = this.service.data$;
在模板中

{{data$ | async}}
{{data}}
vs必须管理订阅

ngOnInit() {
  this.sub = this.service.data$.subscribe(data => { this.data = data });
}

ngOnDestroy() {
  this.sub.unsubscribe();
}
在模板中

{{data$ | async}}
{{data}}

其实没什么不同,这是你在模板中的订阅方式;这取决于你。其实没什么不同,这取决于你在模板中的订阅方式。那么,不要;这取决于你。我认为主要的区别在于异步管道订阅了一个可观察或承诺,您也可以使用带有承诺的异步,但对于订阅来说,情况并非如此?如果您将组件更改为使用changeDetection:ChangeDetectionStrategy,则效率肯定会更高。OnPush@dota2pro语法是不同的,但您应该能够将承诺的结果输入到本地组件变量中,就像对可观察的。我认为主要区别在于异步管道订阅了可观察或承诺,您也可以使用带有承诺的异步,但对于订阅来说,情况并非如此?如果您将组件更改为使用changeDetection:ChangeDetectionStrategy,则效率肯定会更高。OnPush@dota2pro语法是不同的,但您应该能够将承诺的结果输入到本地组件变量中,就像对可见的。