在Angular中, for循环在Observable之前完成



我正在调用一个返回Promise的onRoute()函数。函数将根据数据的长度多次同步我的数据到API,并每次返回一个字符串消息。我想存储它,但问题是for循环在从API服务器获取消息之前完成。

请帮帮我。

syncOnRoute() {
return new Promise((resolve, reject) => {
this.auth.database.executeSql('select * from onroute where HaveData=?', 
['yes']).then((res) => { //will get 3 data from Database

for (let i = 0; i < res.rows.length; i++) { // will execute 3 times

let params = new HttpParams()
.set('CLAIMGUID', res.rows.item(i)['CLAIMGUID'])
.set('JOBGUID', res.rows.item(i)['JOBGUID'])
.set('Latitude', res.rows.item(i)['Latitude'])
.set('Longitude', res.rows.item(i)['Longitude'])
.set('OnRouteDT', res.rows.item(i)['OnRouteDT'])
.set('Desc', this.auth.getdateformatV2())
.set('title', 'onroute');
this.auth.httpSend('Service_SaveOnRoute', params, 'post').subscribe((msg) => {
console.log('##SUCCESS ONROUTE SYNC' + JSON.stringify(msg)); // getting return msg from API
}, 
(err) => {
console.log('##SUCCESS ONROUTE SYNC' + JSON.stringify(err));

}
);
} // for loop gets completed before geting return msg from API

x

这是我的httpSent(),它是可观察的

public httpSend(endPoint:string, params:HttpParams , method: string){

switch(method){
case 'post':{
return  this.httpClient.post<any>("https://ws-v3test.ventureprise.cloud/Service1.asmx/"+endPoint,params);
}
break;
case 'get':{
return  this.httpClient.get<any>("https://ws-v3test.ventureprise.cloud/Service1.asmx/"+endPoint);
}
}
}

我想你可以改变你的订阅toPromise并使用for等待

或者你可以把所有this.auth。httpSend('Service_SaveOnRoute', params, 'post')循环结束后,你可以等待所有订阅

我希望它能帮助你!享受编程!

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of

最新更新