首页 > 解决方案 > 错误:序列中没有元素。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) 有效,我知道,但这不是根本原因,也不是 任何人都可以提供帮助的解决方案?

标签: angularoperatorsangular8

解决方案


推荐阅读