如何处理递归函数包含可观察的?

时间:2018-04-24 15:23:24

标签: angular observable

我的模型有一个“名称”属性,我应该在保存此属性时检查是否有任何模型实例已经具有此名称,如果有,我将重新生成一个名称并重复上述。问题是我有不知道如何用Observable处理这种情况。我试过递归函数,但它不起作用! 有人能给我一些帮助吗?

test(name: string): string {
    const url = `/api/products/?name=${name}`;
    return this.http.get<any>(url).map(data => {
      if (data.length > 0) {
        name = "an other name";
        this.test(name);
      }
      return name;
    });
  }

1 个答案:

答案 0 :(得分:0)

需要进行三项更改:

  1. 尝试使用concatMap而不是使用地图。
  2. return name;更改为return return Observable.of(name)
  3. 不要忘记返回递归this.test(name)
  4. test(name: string): Observable<string> {
        const url = `/api/products/?name=${name}`;
        return this.http.get<any>(url).concatMap(data => {
          if (data.length > 0) {
            name = "an other name";
            return this.test(name);
          }
          return Observable.of(name);
        });
      }