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...ofawait

您可以将所有 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 类中的数组数组

[angular]遍历Array的方法:for, forEach, every等

在 Angular 中使用 getElementById 可以吗?

RxJS之转化操作符 ( Angular环境 )

如何在react.js 中利用for循环之类的输出html

如何在react.js 中利用for循环之类的输出html