@Hidralisk

Доступ с множественных инстансов к методу?

Всем привет.
Есть такой вопрос.
Существует 2 (или много) инстансов приложения. Есть сервис с каким то условным методом run()
run() запускает асинхронную задачу и возвращает какой то ответ. run() дергается через контролер.
Задача в том чтобы при множественных одинаковых входящих запросах запускать run() один раз .. При повторных соответственно отдавать статусы ответа "в процессе" или "такой запрос уже выполнен".
Как правильно синхронизировать между многими инстансами данный метод ?
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 2
Robur
@Robur
Знаю больше чем это необходимо
Сохраняете состояние в run и при вызове проверяете.
Например так:

async run() {
     if (this.isRunning) return 'in process'
     this.isRunning = true
     await doTask()
     this.isRunning = false
}


Можно в isRunning использовать промис и возвращать его, тогда все кто вызывает run() смогут дождаться результата выполнения задачи.
в конце isRunning или обнулять, если run() вызывается много раз, или так оставить, тогда все последующие вызовы будут возвращать тот же результат даже после того как запрос уже давно выполнен.
Ответ написан
Bavashi
@Bavashi
Попробуйте почитать здесь. Если коротко, то скорее всего никак:

In any case, doing this correctly is hard in any but the most trivial cases.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы