angular中订阅方法的最佳实践是啥?
Posted
技术标签:
【中文标题】angular中订阅方法的最佳实践是啥?【英文标题】:What is the best practice for subscribe method in angular?angular中订阅方法的最佳实践是什么? 【发布时间】:2022-01-01 02:42:05 【问题描述】:我只是想知道哪个是 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 时,此警报才会起作用。对吗?可观察方法返回 void。所以,我无法确定响应状态。
相反,我应该使用以下情况吗?可观察方法返回任何。我可以得到响应状态。
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);
);
【问题讨论】:
【参考方案1】:当您订阅由HttpClient
返回的 Observable 时,您最多可以指定 3 个回调,按顺序:
next
,接收成功响应的正文(如果成功的响应没有正文,则返回 null)
error
,收到错误,阻止此请求成功
complete
,如果请求成功则在next
之后调用
如您所见,每个成功的请求都会调用next
,即使响应没有正文。
所以,我无法确定响应状态。
这是一个误解。每个 HTTP 响应 contains 一个响应代码。它可能包含也可能不包含正文,但它始终包含一个响应代码,它指示请求是否成功,并确定 HttpClient 将调用next
还是error
。
顺便说一句,所有格式为 2xx indicate success 的响应代码,而不仅仅是 200。接收到 201 Created
或 204 No Content
无需惊慌。
【讨论】:
这就是我要寻找的答案。我现在明白了。 next 为每个成功的请求调用。谢谢!【参考方案2】:正常情况下的http.post方法。
只返回body或者异常的内容就够了,我们经常只想获取request的内容。这就是为什么它被用作默认行为。
有时,我们需要访问其他字段,例如状态,https,则必须使用第二种方式。
您可以自定义返回HttpResponse的数据。
来自文档:
https://angular.io/guide/http#reading-the-full-response
https://angular.io/api/common/http/HttpResponse
【讨论】:
感谢您的回答,但我不是在问这个。请问在什么情况下进入subscribe方法?有必要像我写的第二种方式发送吗?我已经用第二种方式发送了 observe: 'response' 。 正常情况下就足够了,这就是为什么它被用作默认值。在某些情况下,我们希望访问其他字段,例如响应头...我们必须使用第二种方式...我更新了答案...以上是关于angular中订阅方法的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Angular 站点中使用 content-security-policy 的最佳实践是啥?