Node.js 在循环中执行下一个HTTP post之前,先完成HTTP post请求
我有一个循环,它每次循环都会发出HTTP post请求Node.js 在循环中执行下一个HTTP post之前,先完成HTTP post请求,node.js,angular,Node.js,Angular,我有一个循环,它每次循环都会发出HTTP post请求 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
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])
);
}
for(设i=1;iconsole.log(“在“+i”成功),
error=>console.log(错误+”位于“+arr[0]”)
);
}
但我发现,它不会等到HTTP post完成后才进入下一个循环并执行下一个HTTP post。我想要实现的是在继续执行下一个循环执行HTTP post之前先完成一个HTTP post。我不会实现这一点,因为我希望数据库中保存的数据顺序与循环中数组的顺序相同。有什么办法吗?我使用anuglar和nodejs顺便说一句,你可以创建一个递归函数,如下所示
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
);
}
这样,在上一次订阅完成之前,不会调用
示例的下一次迭代
,您可以使用aync/await
在angularhttp.get/post/etc
中,默认情况下返回一个Observable
,但有一个toPromise()
方法使其成为承诺。一旦得到承诺,您就可以使用async/await
我正在添加一个POC,不知道它是否有效。我将编辑它的语法错误
async function getAsyncData() {
for (let i = 1; i < this.data.length; i++) {
let arr = this.data[i];
const data = await this.http.post('link here', {
name: arr[0],
gender: arr[1],
course: arr[2],
year: arr[3]
})
.toPromise();
console.log(data);
}
}
异步函数getAsyncData(){
for(设i=1;iasync function getAsyncData() {
for (let i = 1; i < this.data.length; i++) {
let arr = this.data[i];
const data = await this.http.post('link here', {
name: arr[0],
gender: arr[1],
course: arr[2],
year: arr[3]
})
.toPromise();
console.log(data);
}
}