for 循环在 Angular 中的 Observable 之前完成
Posted
技术标签:
【中文标题】for 循环在 Angular 中的 Observable 之前完成【英文标题】:for loop gets completed before Observable in Angular 【发布时间】:2021-11-25 07:25:41 【问题描述】:我正在调用一个返回 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);
【问题讨论】:
【参考方案1】:我想您可以将您的 subscribe 更改为 toPromise 并使用 for...of 和 await
您可以将所有 this.auth.httpSend('Service_SaveOnRoute', params, 'post') 放入一个数组中,循环结束后,您可以等待所有 subscribe强>
希望对你有帮助!享受编程!
https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Statements/for-await...of
【讨论】:
一种等待可观察对象完成的方法)***.com/questions/41734921/… 谢谢阿列克西。现在问题已经解决了。已经使用一个数组来存储所有订阅的值。然后将检查数据发送的时间等于我收到消息的时间。检查它是否为真后,它将解决承诺以上是关于for 循环在 Angular 中的 Observable 之前完成的主要内容,如果未能解决你的问题,请参考以下文章
[angular]遍历Array的方法:for, forEach, every等