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。
来自文档:
当你订阅一个由HttpClient
返回的Observable时,你最多可以指定3个回调,顺序是:
next
,接收成功响应的主体(如果成功响应没有主体,则为 null)
error
,收到阻止此请求成功的错误
complete
,如果请求成功next
后调用
如您所见,即使响应没有正文,每个成功的请求都会调用 next
。
So, I can not get a response status for sure.
这是误会。每个 HTTP 响应 contains 一个响应代码。它可能包含也可能不包含正文,但它始终包含响应代码,指示请求是否成功,并确定 HttpClient 是否将调用 next
或 error
.
顺便说一句,所有 2xx indicate success 形式的响应代码,而不仅仅是 200。收到 201 Created
或 204 No Content
不会引起警报。
我只是想知道哪个是 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。
来自文档:
当你订阅一个由HttpClient
返回的Observable时,你最多可以指定3个回调,顺序是:
next
,接收成功响应的主体(如果成功响应没有主体,则为 null)error
,收到阻止此请求成功的错误complete
,如果请求成功next
后调用
如您所见,即使响应没有正文,每个成功的请求都会调用 next
。
So, I can not get a response status for sure.
这是误会。每个 HTTP 响应 contains 一个响应代码。它可能包含也可能不包含正文,但它始终包含响应代码,指示请求是否成功,并确定 HttpClient 是否将调用 next
或 error
.
顺便说一句,所有 2xx indicate success 形式的响应代码,而不仅仅是 200。收到 201 Created
或 204 No Content
不会引起警报。