我正在编写一个充斥着异步任务的解析器。我使用JQuery promises来控制和排序异步任务。这是构造函数的伪代码版本:
/**
* @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的聚合状态 通过
如何使用.progress()通知任何关心Parser整体进度的人? e.g。
var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});
这是我想要做的事情的小提琴: http://jsfiddle.net/ashanova/RjULA/2/
答案 0 :(得分:14)
使用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);
});