JQuery Отложен. Использование $.when и .progress()
Я пишу парсер, заваленный задачами Async. Я использую JQuery promises для управления и заказа задач async. Это версия кода функции-конструктора psuedo:
/**
* @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:
В случае, когда несколько переданных объектов передаются в jQuery.when, метод возвращает Promise из нового объекта "master" Deferred который отслеживает совокупное состояние всех Отложенных прошло
Как я могу использовать .progress(), чтобы уведомить кого-нибудь, кто интересуется общим прогрессом Парсера?
например.
var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});
Вот, что я пытаюсь сделать:
http://jsfiddle.net/ashanova/RjULA/2/
Ответы
Ответ 1
Используйте deferred.notify()
, чтобы вызвать progressCallbacks
. Например:
function doSomething() {
var dfd = $.Deferred();
var count = 0;
var intervalId = setInterval(function() {
dfd.notify(count++);
count > 3 && clearInterval(intervalId);
}, 500);
return dfd.promise();
};
var promise = doSomething();
promise.progress(function(prog) {
console.log(prog);
});
DEMO.