使用Observables

时间:2016-06-09 00:39:31

标签: angularjs angular rxjs

我需要连续调用异步函数,这意味着异步函数在循环内部,但是为了调用下一个函数,我需要前一个完成。这是一个代码示例:

for(var index in array){
   myAsyncFunction(arg, (newArg) =>{
      // use newArg for the successive myAsyncFunction calls
   })
}

每个myAsyncFunction都要等待前一个结束,以便它可以用新参数调用它。

我使用角度为1的$q.when做到了但不知道如何使用Rxjs

2 个答案:

答案 0 :(得分:0)

您应该可以使用array.reduce执行此操作。

array.reduce((prev, curr, idx) => {
  return prev.then((arg) => {
    return myAsyncFunction(arg);
  });
}, arg)

我真的不明白你的例子中argnewArg是什么,因为我的代码可能不是你想要的。

您可以在

中找到更多详情

答案 1 :(得分:0)

不确定我是否理解你的问题,但这里是:) 如果使用Observables,除非订阅了它们,否则它们不会被启动。 如果我理解你想加载一些东西,当它加载了新的参数然后将它们传递到相同的加载函数来加载另一个资源。

这段代码大多是理论上的,因为我还没有测试过。正如你所看到的那样,一旦第一次调用完成后它会再次调用自己,直到我们决定我们想要中断(在我的例子中,我们可以将newArg设置为true,并在if语句中检查)或遇到一些错误



    private getSmth(arg): Observable {
        // do something with arg
        return this.http.get(url)
          .map(this.extractData) // function to handle response
          .catch(this.handleError); // function to handle errors
      }

    public loadSmth(arg): void {
        if (arg has ending requirements) {
          console.log('THE END');
          return;
        }
        this.getSmth(arg)
          .subscribe(data => {
            // do something with data maybe generate new args
            this.loadSmth(newArgs);
          }, error => this.error = error);
      }