Коллеги, просьба помочь.
Есть несколько запросов на сервер. В замен сервер создает задачи по эти запросам и отдает id задачи, по которому я проверяю статус выполнения задачи другим запросом.
Когда все задачи выполнены, необходимо продолжить выполнение синхронного кода.
Как дождаться выполнения всех задач?
Вот как это устроено у меня:
async getTaskStatus(id, resolve) {
if (!this.queryCounter) {
this.queryCounter = 0;
}
if (this.queryCounter > 20) {
return this.errHandler();
}
try {
const { data: { data: { status } } } = await checkTaskStatus(id);
if (status === 'done') {
return resolve();
} if (status === 'error') {
this.$message.error('Ошибка проведения операции, попробуйте позже');
this.$router.push('/users');
} else {
setTimeout( () => {
this.queryCounter++;
this.getTaskStatus(id, resolve);
}, 500);
}
} catch (e) {
console.error(e);
}
};
try {
const { id } = this.ruleForm.user_dto;
const tasks = [];
tasks.push(updateUserData(id));
tasks.push(updateATTRData(id));
tasks.push(updateOldATTRData(id));
const results = await Promise.all(tasks);
for (let i = 0; i < results.length; i++) {
if (results[i].data.validation_result.success === true) {
let resolve = () => Promise.resolve();
await this.getTaskStatus(results[i].data.data, resolve);
} else {
this.errHandler();
}
}
this.setUser(this.userId);
this.editAdmin = false;
} catch (e) {
this.errHandler();
console.error(e);
}
Соответственно идут первые запросы в цикле и продолжается выполнение кода.
В функции получении статуса есть рекурсия через SetTimeout, тут по сути код и перестает быть асинхронным.
Как дождаться получения статусов с выполненными задачами?