Сохраняете состояние в run и при вызове проверяете.
Например так:
async run() {
if (this.isRunning) return 'in process'
this.isRunning = true
await doTask()
this.isRunning = false
}
Можно в isRunning использовать промис и возвращать его, тогда все кто вызывает run() смогут дождаться результата выполнения задачи.
в конце isRunning или обнулять, если run() вызывается много раз, или так оставить, тогда все последующие вызовы будут возвращать тот же результат даже после того как запрос уже давно выполнен.