Comment faire pour que la boucle attende jusqu'à ce que l'appel Async soit réussi avant de continuer

Bonjour, je crée une mise à jour par lots pour mon magasin local à l'aide d'un appel ajax en boucle et asynchrone.

Mon problème est que ma boucle continue même si mon appel ajax n'est pas encore terminé avec succès.

Comment pouvons-nous réussi à faire pour que l'unité d'attente de boucle réagisse à la réponse ajax avant de continuer la boucle?

Toute aide est appréciée. Merci!!!

Voici mon exemple de code:

var counter =0; var totalRow = 3000; for (var i = 0, l = totalRow; counter <= l; i++) { var defectssurl = 'https://test.com/mywcf.svc/GetListAllPaging?id=' + counter; Ext.Ajax.request({ url: defectssurl, method: "POST", params: '', success: function (resp) { console.log("load first 500 records"); var data = Ext.JSON.decode(resp.responseText); //encode Json List if (counter == 0) { defectsLocalStore.getProxy().clear(); // Also remove all existing records from store before adding defectsLocalStore.removeAll(); } Ext.Array.each(data, function (record) { counter = counter + 1; defectsLocalStore.add(record); }); defectsLocalStore.sync(); // The magic! This command persists the records in the store to the browsers localStorage //records is now same as the total records if (counter >= totalRow) { pCallback(); } //continue loop }, headers: { 'Content-Type': 'application/json; charset=utf-8' }, failure: function (resp) { } }); } 

N'utilisez pas "for loop". Au lieu de succès, le rappel augmente le compteur et déclenche lui-même. Quelque chose comme ci-dessous.

 function mySyncFunction (counter, totRecords){ if(counter === undefined) counter = 0; if(counter >=totRecords) return; var defectssurl = 'https://test.com/mywcf.svc/GetListAllPaging?id=' + counter; Ext.Ajax.request({ url:defectssurl, // snip // your code here success: function (resp) { // snip // your code here counter++; mySyncFunction(counter, totRecords); } // snip // your code here });