angular - 仅在第一次失败时执行第二次 http 调用
问题描述
尝试通过管道传递两个 Angular http 调用,其中第二个调用仅在第一个失败时才执行。
第一个电话是:
return this.http.get<AssetGroupHistoryResponseModel>('./assets/data.json');
如果 data.json 不存在,则会引发 404 Not Found 错误,它应该调用适当的 API:
return this.http.get<AssetGroupHistoryResponseModel>(url);
不知道如何使用 rxjs 获得这种行为。
解决方案
您可以使用catchError
RXJS 的操作员来实现这一点。
在这里,试一试:
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { catchError } from 'rxjs/operators';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
constructor(private http: HttpClient) {}
ngOnInit() {
this.getData()
.subscribe(
res => console.log(res)
)
}
getData() {
return this.http.get('http://jsonplaceholder.typicode.com/posts/1')
.pipe(
catchError(error => this.http.get('https://jsonplaceholder.typicode.com/users/1'))
);
}
}
PS:请注意,第一次 API 调用会导致错误,因为它http
在应用程序运行时使用https
。因此,您将获得user
记录到控制台的数据而不是post
数据。
这是您参考的工作示例 StackBlitz。
推荐阅读
- python - 使用 Paramiko 连接到 SSH/SFTP 服务器时出现“getaddrinfo failed”
- excel - 为什么 Countifs 不能使用超过 2 个标准?
- python - 如何使用 Python 代码比较 Appium 中的图片?
- r - 如何使用 R 在极坐标中倾斜表面
- c++ - 为什么 C++ 中的这个 lambda 包含每个引用?
- mongodb-query - 更新 Mongo DB 嵌套数组中的对象值
- c# - 将集合索引驱动器创建为“30000 毫秒后发生超时...”
- javascript - 找不到用于 CircleCI 构建的 ESLint
- google-sheets - 如何将 IF(AND) 与 ArrayFormula 结合起来
- python - 为什么即使在使用 cache=True 之后,Numba jit 编译的函数在连续调用函数时执行得更快?