如何避免Observables的无限循环?

时间:2017-02-09 16:53:14

标签: javascript angular typescript observable

我有以下代码:

ngOnInit(): void
    {  
    const source = this.categoryService.getCategories();
    console.log(source instanceof Observable);
    const example = source.map((categor) => categor.map((categories) => {
    const links = this.categoryService.countCategoryLinks(categories.id);
    const aff = example.merge(links).subscribe(linke => console.log(linke));
            return categories.id
        }));
    }

其中 getCategories()返回一个observable。

在此Observable的每个项目上,我得到 categories.id 字段以运行另一个名为 countCategoryLinks(categories.id)的方法,该方法也返回一个Observable()。< / p>

我的问题是:我只有3个类别(ok),countCategoryLinks()返回3个项目(ok),但上面的代码在控制台中显示无限循环。 两种方法都开始了#34;手动&#34;出于测试目的,不显示任何循环。

问题确实来自上面的代码。

有什么想法吗?

提前致谢和问候

1 个答案:

答案 0 :(得分:1)

example.merge(links)&lt; =您正在使用由映射回调中的map回调创建的observable,这将导致递归(即循环回自身)。这是使用适当的缩进所付出的代价,因为它更容易看到。

ngOnInit(): void {  
    const source = this.categoryService.getCategories();
    console.log(source instanceof Observable);
    const example = source.map((categor) => categor.map((categories) => {
      const links = this.categoryService.countCategoryLinks(categories.id);

      // this line is the issue. You are using variable example which is being created by the callback this line of code is in
      const aff = example.merge(links).subscribe(linke => console.log(linke));
              return categories.id
          }));
}

我想也许你不想在此时仍然在map内?