angular 中订阅方法的最佳实践是什么?

What is the best practice for subscribe method in angular?

我只是想知道哪个是 angular 的最佳实践。

这是一个可观察的方法。

downloadRequest(ids: number[], url: string, inputName: string): Observable<void> {
 const formData = new FormData();
 formData.append(inputName, ids.join(','));
 return this.http.post<void>(url, formData)                                                    
}

这是我使用的订阅方式。

this.downloadService.downloadRequest(data.blabla, url, 'blabla').subscribe(res => {
 alert('HEY');
 }, err => {
  console.log(err);
 });

在这种情况下,只有当响应状态等于 200 时,此警报才会起作用。对吗?可观察方法returns无效。所以,我无法确定回复状态。

相反,我应该使用以下情况吗?可观察方法returns any。我可以获得响应状态。

downloadRequest(ids: number[], url: string, inputName: string): Observable<any> {
 const formData = new FormData();
 formData.append(inputName, ids.join(','));
 return this.http.post<any>(url, formData, {observe: 'response'})                                                    
}

this.downloadService.downloadRequest(data.blabla, url, 'blabla').subscribe(res => {                  
 if (res.status === 200) {                                                                    
   alert('HEY');
 }
 }, err => {
  console.log(err);
 });

使用 http.post 方法的正常情况。

只要returnbody或者exception的内容就够了,我们很多时候只想获取request的内容。这就是它被用作默认行为的原因。

有时,我们需要访问其他字段,如状态,https 则必须使用第二种方式。

您可以自定义数据 return HttpResponse。

来自文档:

https://angular.io/guide/http#reading-the-full-response

https://angular.io/api/common/http/HttpResponse

当你订阅一个由HttpClient返回的Observable时,你最多可以指定3个回调,顺序是:

  • next,接收成功响应的主体(如果成功响应没有主体,则为 null)
  • error,收到阻止此请求成功的错误
  • complete,如果请求成功next后调用

如您所见,即使响应没有正文,每个成功的请求都会调用 next

So, I can not get a response status for sure.

这是误会。每个 HTTP 响应 contains 一个响应代码。它可能包含也可能不包含正文,但它始终包含响应代码,指示请求是否成功,并确定 HttpClient 是否将调用 nexterror.

顺便说一句,所有 2xx indicate success 形式的响应代码,而不仅仅是 200。收到 201 Created204 No Content 不会引起警报。