我有此代码:
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?
非常感谢您!
答案 0 :(得分:1)
我认为订阅功能使用了Promise。 正如您所说,在遍历Array并在每次迭代上执行一个Promise时,迭代器不会等待Promise被解决。
您可以像这样在forEach中汇总所有承诺:
users() {
...
let promises = []
cookies.forEach(user=> {
promises.push(this.save(user));
});
Promise.all(promises).then(results => {.......});
}