Estoy llamando a una función onRoute() que devuelve Promise. La función sincronizará mis datos con la API varias veces de acuerdo con la longitud de los datos y regresará con un mensaje de cadena cada vez. Quiero almacenarlo, pero el problema es que el bucle se completa antes de recibir el mensaje del servidor API.
Por favor, ayúdame.
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 xAquí está mi httpSent() que es observable
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); } } }Supongo que puede cambiar su suscripción a Promise y usar para... de esperar
Alternativamente, puede poner todo esto.
¡Espero que te ayude! ¡Disfruta de la programación!
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of