Я пытаюсь найти способ убедиться, что определенное действие было выполнено до запуска другой функции. В моем коде я запускаю запрос API для обновления данных, а затем вычисляю другое значение на основе результата этого первого запроса.
Однако я иногда сталкивался с тем, что первый запрос не будет выполнен до запуска второй функции, и поэтому данные будут повреждены и не синхронизированы. Я временно обработал это с таймаутом для второй функции. Однако вместо этого я бы хотел использовать async / await, поскольку это, несомненно, лучший (и гарантированный) способ обработки чего-то подобного - поскольку никогда не стоит предполагать, что тайм-аут сработает, а может и нет.
Это то, что у меня сейчас есть:
private async moveRecord(stage) {
if (!this.customer || !this.selectedService) return;
let targetService = this.selectedService.service;
let staffStarted = await this.userAccessService.getTargetId();
this.clientMoveService.moveClientRecord(this.client._id, category, targetService, staffStarted);
setTimeout(() =>
{
this.getNextStageOperation();
}, 1000);
}
Как я могу настроить этот код, чтобы использовать async / await для запуска this.getNextOperation
только после того, как первый запрос this.clientMoveService.moveClientRecord()
завершен?
Могу я просто сделать это?
private async moveRecord(stage) {
if (!this.customer || !this.selectedService) return;
let targetService = this.selectedService.service;
let staffStarted = await this.userAccessService.getTargetId();
await this.clientMoveService.moveClientRecord(this.client._id, category, targetService, staffStarted);
this.getNextStageOperation();
}
Для большей ясности, moveClientRecord()
- это запрос, который выходит за пределы сокетов и выглядит так:
public moveClientRecord(clientId: string, category: string, service: string, staffStarted: string)
{
let args = { id: clientId, category: category, service: service, staff: staffStarted };
console.log('args: ', args);
API.service.cast({
eventName: `clients.updateStatus`,
args: args,
listener: function (data)
{
// Ignore if socket disconnects
if (data === 'disconnect' || data === 'error') return;
// Return true to stop event listener
return true;
}.bind(this)
});
}