Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.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
Javascript 异步管道_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 异步管道

Javascript 异步管道,javascript,angular,typescript,Javascript,Angular,Typescript,我现在正在学习Angular的入门部分,有一部分我不明白 从购物车服务中,他们从app文件夹中的shipping.json获取数据 HttpClient http; getShippingPrices() { return this.http.get('/assets/shipping.json'); } 然后在shippingComponent中调用方法: ngOnInit() { this.shippingCosts = this.cartService.getShippingPric

我现在正在学习Angular的入门部分,有一部分我不明白

从购物车服务中,他们从app文件夹中的shipping.json获取数据

HttpClient http;

getShippingPrices() {
return this.http.get('/assets/shipping.json');
}
然后在shippingComponent中调用方法:

 ngOnInit() {
this.shippingCosts = this.cartService.getShippingPrices();
在html模板中,必须使用异步管道

   <div class="shipping-item" *ngFor="let shipping of shippingCosts | async">

我不明白,为什么我们必须使用异步管道

或者在没有异步管道的情况下也可以这样做吗?

来自:

异步管道订阅一个可观察或承诺,并返回 它发出的最新值。当发出新值时,异步 管道标记要检查的零部件的更改。当组件 如果被销毁,异步管道将自动取消订阅以避免 潜在的内存泄漏

同样来自:

Angular利用可观测数据作为接口来处理各种问题 常见异步操作的定义。例如:

  • 您可以定义自定义事件,这些事件从 子组件到父组件
  • HTTP模块使用可观察对象来 处理AJAX请求和响应
  • 路由器和表单模块使用 用于侦听和响应用户输入事件的可观察对象
那么,为什么要避免使用
async
管道呢?只需在应用程序上使用它,就可以享受反应式编程功能;)

来自:

异步管道订阅一个可观察或承诺,并返回 它发出的最新值。当发出新值时,异步 管道标记要检查的零部件的更改。当组件 如果被销毁,异步管道将自动取消订阅以避免 潜在的内存泄漏

同样来自:

Angular利用可观测数据作为接口来处理各种问题 常见异步操作的定义。例如:

  • 您可以定义自定义事件,这些事件从 子组件到父组件
  • HTTP模块使用可观察对象来 处理AJAX请求和响应
  • 路由器和表单模块使用 用于侦听和响应用户输入事件的可观察对象

那么,为什么要避免使用
async
管道呢?只需在应用程序上使用它,就可以享受反应式编程功能;)

因为
http.get
返回一个可观察的对象,而不是数据。如果不想使用异步管道,可以订阅或使用wait


this.shippingCosts=等待这个.cartService.getShippingPrices().first().toPromise()

因为
http.get
返回一个可观察的对象,而不是数据。如果不想使用异步管道,可以订阅或使用wait


this.shippingCosts=等待这个.cartService.getShippingPrices().first().toPromise()

仅当您未订阅可观察对象时,才使用异步管道。这是最推荐的获取数据的方法,因为一旦数据丢失,您不必取消订阅,它会自动完成。正如您在这段代码中看到的,您不必订阅cartService.getShippingPrices()

ngOnInit(){
this.shippingCosts$=this.cartService.getShippingPrices();
}
{{shipping}
在这段代码中,您将得到相同的结果,但没有异步管道,但请记住,在本例中,您必须订阅cartService.getShippingPrices()。此外,一旦你完成了这个特殊情况下的数据,你将不得不取消订阅的可观

shippingCosts;
ngOnInit() {
  this.cartService.getShippingPrices().subscribe((data) => this.shippingCosts = data);
}
<div class="shipping-item" *ngFor="let shipping of shippingCosts">{{ shipping }}</div>
运输成本;
恩戈尼尼特(){
this.cartService.getShippingPrices().subscribe((数据)=>this.shippingCosts=data);
}
{{shipping}
另一个重要的注意事项:请在持有可观测值的变量前面添加美元符号。在可观察变量的名称中使用美元符号被认为是最佳做法。这样很容易识别变量是否是可观察的


示例:shippingCosts$

仅当您未订阅observable时才使用异步管道。这是最推荐的获取数据的方法,因为一旦数据丢失,您不必取消订阅,它会自动完成。正如您在这段代码中看到的,您不必订阅cartService.getShippingPrices()

ngOnInit(){
this.shippingCosts$=this.cartService.getShippingPrices();
}
{{shipping}
在这段代码中,您将得到相同的结果,但没有异步管道,但请记住,在本例中,您必须订阅cartService.getShippingPrices()。此外,一旦你完成了这个特殊情况下的数据,你将不得不取消订阅的可观

shippingCosts;
ngOnInit() {
  this.cartService.getShippingPrices().subscribe((data) => this.shippingCosts = data);
}
<div class="shipping-item" *ngFor="let shipping of shippingCosts">{{ shipping }}</div>
运输成本;
恩戈尼尼特(){
this.cartService.getShippingPrices().subscribe((数据)=>this.shippingCosts=data);
}
{{shipping}
另一个重要的注意事项:请在持有可观测值的变量前面添加美元符号。在可观察变量的名称中使用美元符号被认为是最佳做法。这样很容易识别变量是否是可观察的


示例:shippingCosts$

典型的异步或可观察操作需要订阅或等待构造,如下所示:

// async await example
async function getPrices(){
  let prices = await this.cartService.getShippingPrices();
  return prices;
}
使用async/await构造的代码在代码完成之前不会返回。“let prices=await”是所谓结束的签名,其功能与:

ngOninit(({
  //subscription on observable example
  getPrices.subscribe(prices=>{ //data returned here });
}
function getPrices(){
  this.cartService.getShippingPrices();      
}

正如你所看到的,这两种情况的结果都是价格。使用异步管道,代码会在将来的某个时候自动连接到结果。

典型的异步或可观察操作需要订阅或等待构造,如下所示:

// async await example
async function getPrices(){
  let prices = await this.cartService.getShippingPrices();
  return prices;
}
使用async/await构造的代码在代码完成之前不会返回。“let prices=await”是所谓结束的签名,其功能与:

ngOninit(({
  //subscription on observable example
  getPrices.subscribe(prices=>{ //data returned here });
}
function getPrices(){
  this.cartService.getShippingPrices();      
}
尽你所能