【问题标题】:for loop gets completed before Observable in Angularfor 循环在 Angular 中的 Observable 之前完成
【发布时间】: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);

      }
    }
  }

【问题讨论】:

    标签: javascript angularjs typescript


    【解决方案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

    【讨论】:

    • 一种等待可观察对象完成的方法)stackoverflow.com/questions/41734921/…
    • 谢谢阿列克西。现在问题已经解决了。已经使用一个数组来存储所有订阅的值。然后将检查数据发送的时间等于我收到消息的时间。检查它是否为真后,它将解决承诺
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多