等待foreach内部的可观察

时间:2018-07-29 11:43:53

标签: node.js foreach observable wait

我有此代码:

users() {
    ...
    cookies.forEach(user=> {
        this.save(user);
    });
}

save(user) {
    this.userName = user.split(';')[0];
      this.userService.saveUser(this.userName).subscribe(() => {
          ...
        });
    });
  }

问题是,它使用第一个用户及其用户名遍历了forEach。然后,它应该执行saveUser,但是在执行它之前,它会再次遍历forEach。因此,用户及其用户名也已更改。因此,最后,我总是保存相同的用户。

有没有办法让forEach等待saveUser?

非常感谢您!

1 个答案:

答案 0 :(得分:1)

我认为订阅功能使用了Promise。 正如您所说,在遍历Array并在每次迭代上执行一个Promise时,迭代器不会等待Promise被解决。

您可以像这样在forEach中汇总所有承诺:

users() {
...
    let promises = []
    cookies.forEach(user=> {
        promises.push(this.save(user));
    });
    Promise.all(promises).then(results => {.......});
}