Итак, у меня есть сложный вопрос, который может быть легко оценить, но у меня возникают проблемы с его работой.
У меня есть глобальный объект, который хранит различные представления формы, и когда кнопка нажата, она перебирает значения и свои API, основываясь на ключе значений внутри.Функция работает, однако цикл повторяется полностью, а затем происходит сбой API.
Я хочу объединить или удалить значения, которые были успешно отправлены из объекта, и оставить те, которые нет.Я также хочу установить некоторый тип задержки или тайм-аута между каждой итерацией для вызовов API. Я не использую API для каждого вызова одновременно.
Мой код может быть более сложным, чем должен быть, но я пытался экспериментировать с разными источниками.Я также читал о замыканиях в циклах и понимаю, почему цикл завершается до завершения API, но я просто хочу знать, есть ли лучший способ или вообще хочу, чтобы мой код функционировал должным образом.
Любая помощь в дальнейшем обучении меня этому предмету или альтернативным методам будет принята с благодарностью.
Редактировать: Таким образом, я удалил setTimeout () из вызова, и итерация работает как надо, но по какой-то причинеМассив будет разделяться до двух последних значений, и он застревает. Я также заметил, что переменная i работает, как и при удалении вызова API, но она сбрасывается при добавлении.
Мой провайдер вызываетAPI:
submitBatchData(data,authToken){
//console.log(data,authToken);
const httpOptions = {
headers: new HttpHeaders({
'Accept': 'application/json, text/plain',
'Content-Type': 'application/json',
'Authorization': authToken
})
};
return this.http.post(this.apisubmitTreatUrl, JSON.stringify(data), httpOptions).retry(3).timeout(10000).delay(2000);
}
Основная итерация цикла while:
submitOfflineForm(data){
var data = data;
var length:number = data.length;
var secondLength = data.length;
var testLength = data.length;
var count=0;
while(secondLength--){//I have another loop that runs before checking for another value. Hance the multiple variables
//console.log(secondLength);
//console.log(count);
this.callAPI(testLength,secondLength,data[secondLength],data);
}
}
callAPI(testLength,i,data,allData) {
//where code is being run
}
Когда я запускаю только журналы консоли и массив сплайсинга, он работает следующим образом (3 значения в массиве):
case "Batch": {
console.log(i);
console.log('Before: ' + allData);
allData.splice(i,1);
console.log('After: ' + allData);
break;
}
Журналы:
2
dataservice.ts:279 Before: [object Object],[object Object],[object Object]
dataservice.ts:281 After: [object Object],[object Object]
1
dataservice.ts:279 Before: [object Object],[object Object]
dataservice.ts:281 After: [object Object]
dataservice.ts:278
0
dataservice.ts:279 Before: [object Object]
dataservice.ts:281 After:
Но когда я добавляю вызов API:
case "Batch": {
// console.log("Here in Batch");
submit.submitBatchData(data["Info"],token).subscribe((result)=>{
//console.log(result["Status"]);
if(result["Status"]==true){
console.log(i);
console.log('Before: ' + allData);
allData.splice(i,1);
console.log('After: ' + allData);
// isEmpty(i,allData,storage,offline,loading);
}
else{
this.presentToast('Batch Treatment not submitted with location!');
}
}, (err)=>{
this.presentToast('Could not submit Batch Location!');
});
break;
}
Журналы:
1
dataservice.ts:279 Before: [object Object],[object Object],[object Object]
dataservice.ts:281 After: [object Object],[object Object]
dataservice.ts:413 Current length of array after splicing: 2
dataservice.ts:414 (2) [{…}, {…}]
dataservice.ts:416 (2) [{…}, {…}]
2
dataservice.ts:279 Before: [object Object],[object Object]
dataservice.ts:281 After: [object Object],[object Object]
dataservice.ts:413 Current length of array after splicing: 2
dataservice.ts:414 (2) [{…}, {…}]
dataservice.ts:416 (2) [{…}, {…}]
0
dataservice.ts:279 Before: [object Object],[object Object]
dataservice.ts:281 After: [object Object]
dataservice.ts:413 Current length of array after splicing: 1
dataservice.ts:414 [{…}]
dataservice.ts:416 [{…}]
Значение i сбрасываетсяполностью, я не уверен, почему именно это происходит.Любая помощь будет оценена.