我有这个循环,每次循环都会发出一个HTTP发布请求。
for(let i = 1; i < this.data.length; i++) {
let arr = this.data[i];
this.http.post('link here', {
name: arr[0],
gender: arr[1],
course: arr[2],
year: arr[3]
}).subscribe(
(data: any) => console.log("succes at " + i),
error => console.log(error + "at" + arr[0])
);
}
但是我发现它不等待HTTP帖子完成才继续前进到下一个循环并执行下一个HTTP帖子。我要实现的是先完成一个HTTP帖子,然后再继续执行下一个执行HTTP帖子的循环。因为我希望保存在数据库中的数据顺序与循环中数组的顺序相同,所以我不会实现这一点。有什么想法怎么做?我正在使用ugug和nodejs btw
您可以像这样创建一个递归函数
example(i, limit, data) {
let arr = this.data[i];
this.http.post('link here', {
name: arr[0],
gender: arr[1],
course: arr[2],
year: arr[3]
}).subscribe(
(data: any) => console.log("succes at " + i),
error => console.log(error + "at" + arr[0]),
() => ++i < limit ? this.example(i, limit) : null
);
}
并开始循环,使用以下命令调用它:
this.example(0, this.data.length, this.data)
这样,在example
先前的订阅完成之前,不会调用的下一个迭代
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句