Пишу парсер, заваленный асинхронными задачами. Я использую промисы JQuery для контроля и упорядочения асинхронных задач. Это псевдокодовая версия функции-конструктора:
/**
* @constructor
*/
function Parser(json)
{
return $.when(
this.delete().then(this.insert(json)),
this.doSomething(),
this.doSomethingElse().then(this.update(json))
)
};
и вот как выглядит пример функции:
Parser.prototype.doSomething = function()
{
var dfd = $.Deferred();
exampleTask(dfd.reject, dfd.resolve);
return dfd.promise();
};
Из документов JQuery:
В случае, когда несколько объектов Deferred передаются в jQuery.when, метод возвращает Promise из нового «главного» объекта Deferred, который отслеживает совокупное состояние всех объектов Deferred, которые он передал.
Как я могу использовать .progress() для уведомления всех, кому небезразличен общий прогресс парсера? например
var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});
Вот скрипка с тем, что я пытаюсь сделать: http://jsfiddle.net/ashanova/RjULA/2/