加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

正确使用Angular 5的异步调用

发布时间:2020-12-17 18:01:32 所属栏目:安全 来源:网络整理
导读:我已经谷歌搜索了几天,发现了许多不同的场景,关于如何使用Angular 5(或2-3-4,无论如何)使用异步API调用. 任何人都可以给我一些正确的例子(一些好的用例)吗? 恩. 使用(async – try – catch)进行API调用 如何在组件级别“订阅”该调用 谢谢 ! 解决方法 我
我已经谷歌搜索了几天,发现了许多不同的场景,关于如何使用Angular 5(或2-3-4,无论如何)使用异步API调用.

任何人都可以给我一些正确的例子(一些好的用例)吗?

恩.

>使用(async – try – catch)进行API调用
>如何在组件级别“订阅”该调用

谢谢 !

解决方法

我会根据我的意见和我的学习方式给你一个asnwer.所以不要把它当作绝对真理,而是要质疑它!

首先,您应该知道在Typescript中,有两种方法可以进行异步调用:Promises和Observables.

Promise在ES6中是原生的,Observables是Rx JS的一部分.

但是哪一个使用?

因为我认为,我会告诉你使用Observables,因为

>他们可以被阻止
>他们可以再次出场
>他们有很多有用的操作符
>他们可以处理多个值

所有这一切,Promises都做不到.

进行API调用

导入模块

非常简单:首先,您需要导入负责该模块的模块:

import { HttpClientModule } from '@angular/common/http';
// ...
imports: [HttpClientModule]

这是Angular 5中新的和改进的http服务.我强烈建议你使用它,因为较旧的(Http)很快就会过时.

使用HttpClient服务

现在,在您的服务中,您可以像这样使用HttpClient

import { HttpClient } from '@angular/common/http';
// ...
constructor(
  private http: HttpClient
) {}
// ...
getAny(): Observable<any> {
  return this.http.get<any>('url'); // request options as second parameter
}

使用商业服务

在您的组件中,您现在可以执行此操作

import { MyService } from '../myservice/myservice.service';
// ..
constructor(private myService: MyService) {
    this.myService.getAny().subscribe(() => {});
}
// ..

补充资料

处理错误或加载器

假设您要显示进度条或处理错误:为此,您必须使用拦截器.拦截器是在发送之前(或之后)捕获您的请求的服务,并且会执行某些操作.

这是一个简单的错误拦截器:

import { Injectable } from '@angular/core';
import { HttpInterceptor,HttpHandler,HttpRequest,HttpEvent,HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class ErrorHandlerService implements HttpInterceptor {

  constructor() { }

  intercept(req: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> {
    return next
      .handle(req)
      .catch(err => {
        console.log('error occured');
        return Observable.throw(err);
      });
  }
}

要使用它,只需在模块中提供您的价值:

providers: [
  { provide: HTTP_INTERCEPTORS,useClass: ErrorHandlerService,multi: true }
]

我想你猜对了,但你也可以用它来处理进度条;)

订阅Observable并使用异步

如您之前所见,您可以订阅http呼叫.

如果您想处理特定错误并在组件中执行某些逻辑,请按以下步骤操作:

myService.getAny().subscribe(
  responseAfterSuccess => {},responseAfterError => {}
);

使用此代码,您将处理成功和错误.

最后,异步管道:异步管道将Observable转换为数据.要使用它,请执行此操作

this.myVar = myService.getAny();

你的变量myVar将包含一个Observable.现在,在你的HTML中,用这个

<div *ngFor="let item of myVar | async">{{ item }}</div>

Angular会在显示任何内容之前将数据到达,并将Observable转换为数据,就像您手动完成一样.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读