Судя по вашим комментариям, вы просто пытаетесь понять, как узнать, когда был выполнен последний запрос.Для этого я бы предложил просто поместить все обещания в массив и использовать Promise.all()
в массиве обещаний, чтобы знать, когда они все будут выполнены.Таким образом, Promise.all()
сделает всю работу за вас, чтобы поддерживать счетчики, чтобы знать, когда все запросы выполнены.
Я также заменил ваше использование setTimeout()
на служебную функцию на основе обещаний delay()
это лучше сочетается с обещаниями.
// helper function that returns a promise
// that resolves after a timeout time
function delay(t, v) {
return new Promise(resolve => {
setTimeout(() => {
resolve(v);
}, t);
});
}
function axiosRequest() {
let newT = {
value: {
test: 't',
test2: 't2',
test3: 't3',
test4: 't4',
test5: '',
test6: ''
}
}
let promises = [];
let contianerT = [];
for (let m of contianerT) {
Object.entries(contianerT[m].value).forEach(([key, value], index, array) => {
if (value !== "") { //don't loop through empty values
// let len = Object.keys(value).length
//let last_element = sortedKeys[sortedKeys.length - 1];
promises.push(delay(500 * index).then(() =>
return axios.post('/url',{key: key, value: value}); // I assume this returns a promise
}));
}
});
}
// returns a promise that resolves to an array of axios.post() results
return Promise.all(promises);
}
axiosRequest().then(() => {
console.log('redirect');
});
Примечания:
Я предположил, что axios.post()
возвращает обещание, которое разрешается до его возвращенного значения.
Я не пытался переписать / исправить вашу задержку, чтобы обойти ограничение скорости.То, что у вас есть, очень примитивно и, вероятно, будет недостаточно, если contianerT
- большой массив.
Массивы следует повторять с for/of
, а не for/in
, потому что for/in
повторяет свойства объекта, а не элементы массива.Итак, for (let m in contianerT)
выглядит неправильно.Кроме того, обратите внимание, что большинство людей пишут это как «контейнер».
PS Обычно я даже не занимаюсь вопросами, которые являются преимущественно псевдокодом, потому что часто спрашивающий даже не знаетвсе проблемы задавать или не задавать правильный вопрос, и мы можем быть намного точнее, предлагая лучший ответ, когда видим реальный код.Пожалуйста, оставьте свой РЕАЛЬНЫЙ код в следующий раз.Вы будете приятно удивлены тем, насколько лучше люди могут вам помочь и насколько больше вы получите помощи для вещей, о которых вы даже не знали, что есть лучший способ сделать это.