angular - 错误:序列中没有元素。Rxjs onErrorResumeNext() 和 first()
问题描述
首先,我用谷歌搜索了很多关于Error: no element in sequence的问题。用take(1)替换first( )可以解决我的问题,但对我来说,这是一种解决方法,而不是修复方法。
我在我的项目中使用 Angular 8。
代码
loadResources(resources: LocalizeResources = null) {
// some other codes...
const urls = [
`json/i18n-resources${this.locale ? '-' + this.locale : ''}.json`,
'json/i18n-resources-en-GB.json',
'json/i18n-resources.json'
]
return onErrorResumeNext(
urls.map(url => this.http.get<LocalizeResources>(url))
).pipe(
first(),
).toPromise();
}
在这个函数中,我使用onErrorResumeNext()从后端检索数据。它应该根据url一个一个地检索数据,直到它得到第一个数据(即operator first()起作用。)
但是不知何故,它只是使用了第一个 url json/i18n-resources${this.locale ? '-' + this.locale : ''}.json
,并且这个 url 没有资源可以返回,然后错误Error: no element in sequence显示在控制台中。
那么为什么onErrorResumeNext() 不使用接下来的两个 url?
我已经在后端定义了资源文件,我可以使用第二个 url 来获取它。但是onErrorResumeNext()只是不想尝试它,它只是在第一个 url 没有返回任何内容时停止。
将 first() 替换为 take(1) 有效,我知道,但这不是根本原因,也不是 任何人都可以提供帮助的解决方案?
解决方案
推荐阅读
- ruby - Cocoapods 安装错误 mkmf.rb 找不到 ruby 的头文件
- hive - 运行 sql 时配置单元 UDF 如何运行?
- html - Safari css 显示椭圆而不是标签线
- assembly - MIX 中 STA (0:1) 的行为是什么?
- javascript - validateForm()有bug时如何避免onsubmit="return validateForm()"提交表单?
- django - 如何在我的 Django 项目中使用需要 conda 环境的第三方存储库
- java - 我不明白为什么这不起作用线程“main”java.util.InputMismatchException中的异常
- javascript - 来自php脚本/ unixtime的Highcharts格式json数据
- javascript - 表格行不能作为 div 组件的子项出现
- ios - collectionView Header 中的搜索栏实现