Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
checkPrerequisites : function(required){//required - массив с именами функций, которые требуется выполнить
var res = new $.Deferred(),
tempArr = required.map(function(){return new $.Deferred();});
_.each(tempArr, function(val, i){
if(this.get(required[i])){ //Если метод уже был выполнен(установлен в true)
val.resolve();
}else{//в другом случае ждать пока метод будет выполнен
this.once('change:'+required[i], function(){
var method = this.get(required[i]) ? 'resolve' : 'reject';
val[method]();
});
this[required[i]]();
}
}, this);
$.when.apply($, tempArr).done(function(){
res.resolve();
}).fail(function(){
res.reject();
});
return res;
}
/*Пример вызова*/
this.checkPrerequisites(['selectKey']).done(function(){
//Сделать чё-то полезное
}.bind(this))
function do_try(){
call_library();
}
function do_catch( err ){
// handle error
}
try {
do_try();
} catch( e ) {
do_catch( e );
}
Создаётся рабочий поток (worker thread), который в цикле обрабатывает поступающие запросы:
1. Устанавливается общее ограничение по времени на обработку одного запроса
2. Обрабатываются входные данные
3. Происходят вызовы в другие системы, каждый со своим ограничением по времени
4. Происходят сравнительно тривиальные вычисления (сложные подразумевают оформление в виде библиотеки со всем вытекающим из этого)
5. Формируются и отсылаются выходные данные
Альтернативно 1:
* Кидается исключение, которое не перехватывается бизнес-логикой
* Освобождаются все ресурсы, связанные с данным запросом
* Ловится исключение и формируется ответ-ошибка
Альтернативно 2:
* Срабатывает ограничение по времени исполнения
* Задача отменяется
* Освобождаются все ресурсы
* Формируется ответ-ошибка
FutoIn AsyncSteps: концепция и реализация асинхронной бизнес-логики