@komigor

Как сделать контроллер недоступным на время?

У меня есть контроллер который при поступлении запроса делает очень долгую операцию. И мне надо его заблокировать на это время(выдавать ошибку при обращении на него). Должно получится что-то вроде этого.
app.get(
//1) Поступил первый запрос 
//2) Длинная I/O операция 
//3) Поступил второй запрос выбрасваем ошибку(обработчик недоступен) 
//4)Длинная I/O операция закончилась 
//5) Мы снова можем принимать запросы
)

С помощью чего такое можно сделать?
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
john36allTa
@john36allTa
alien glow of a dirty mind
const Controller = function(){
	var busy = false;
	return {
		ready: () => busy === false,
		do: (data) => new Promise((resolve,reject) => {
			if (busy)
				reject("I`m busy dude!")
			busy = true;
			// +100500 code rows
			setTimeout(() => {
				busy = false;
				resolve("wow, its working fine!");
			}, 1000);
		})
	}
}

let ctrl = new Controller();

ctrl.do("something")
	.then(result => console.log("Job's done: " + result))
	
ctrl.do("fault")
	.catch(err => console.log(`Houston, we have a problem: ${err}`));
	
setTimeout(() => ctrl.do("something again").then(result => console.log("It works again: " + result)), 1100)


P.S. делайте очередь, с промисами это несколько строк кода
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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