angular - Angular 6 - Observable 永远不会抛出
问题描述
我正在寻找在 Angular 中处理 observable 的最佳方法。目前的设计是:
public login(email: string, password: string): Observable<string> {
return this.http
.post(environment.apiUrl + '/login', {
email: email,
password: password
})
.map(response => {
this.authenticationService.setToken(response["token"]);
return "OK;"
})
.catch(error => {
console.error('LoginService::error', error);
return throwError(error);
});
}
这一切都很好,但我不想无缘无故地返回“OK”。
我尝试了以下方法,但它说您不能将 Observable < void> 分配给 Observable < never>
public login(email: string, password: string): Observable<never> {
return this.http
.post(environment.apiUrl + '/login', {
email: email,
password: password
})
.map(response => {
this.authenticationService.setToken(response["token"]);
})
.catch(error => {
console.error('LoginService::error', error);
return throwError(error);
});
}
解决方案
public login(email: string, password: string) {
return this.http
.post(environment.apiUrl + '/login', {
email: email,
password: password
}).pipe(
tap({
next: response => {
this.authenticationService.setToken(response["token"]);
},
error: error => {
console.error('LoginService::error', error);
},
}),
)
}
如果您愿意,点击操作符会为您的 Observable 添加一些逻辑,用于每次发射和错误/完成事件。操作员不期望任何返回值并完全忽略它们,Observable 发生的其他所有事情都将照常进行。
推荐阅读
- typescript - 如何从打字稿通用条件中“抛出”?
- reactjs - 如果道具是通过用户输入获得的,如何通过抽屉导航传递道具?
- ios - UICollectionView 布局错误的项目大小
- r - 按 id 和最近日期的条件 left_join
- python - python repli数据库抛出typeError
- php - 如何回显“未找到结果”。使用 sqlsrv 和 PHP?
- azure - Azure IoT 中心边缘模块“AzureVideoAnalyzerEdge”不会部署
- javascript - AssertionError:预期 [ Array(5) ] 具有属性“名称”
- r - 在R中将字符更改为日期/时间
- javascript - 如何在 Node Js Request 中保存变量