【问题标题】:JQuery Deferred. Using $.when and .progress()JQuery 延迟。使用 $.when 和 .progress()
【发布时间】:2012-08-18 00:31:47
【问题描述】:

我正在编写一个充满异步任务的解析器。我使用 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 的聚合状态 通过了

如何使用 .progress() 通知任何关心 Parser 整体进度的人? 例如

var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});

这是我正在尝试做的事情: http://jsfiddle.net/ashanova/RjULA/2/

【问题讨论】:

    标签: javascript jquery progress jquery-deferred


    【解决方案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.

    【讨论】:

    • 我想出了如何在函数中使用 .notify (如在您的演示中),但我想将它传递回构造函数并从那里通知整体进度。我想看看解析器的整体情况,而不是它的功能——如果你关注我?
    • @CrimsonChin:不确定我是否正确理解了您的问题,但在这种情况下,您需要在构造函数中创建并存储对 $.Deferred 的引用,以便您可以在每个方法中调用notify。这些方面的东西:jsfiddle.net/B7nzy
    • 更接近了!我认为如果 $.when 创建了一个“master”,那么我可能可以直接将进度通知给那个
    • @CrimsonChin: $.when 不会创建$.Deferred,而是创建Progress,这就是您可以调用notify 的原因。另请注意,您可以通过将简单的回调函数传递给构造函数来完成同样的事情:jsfiddle.net/Fubq4.
    • @JoãoSilva "$.when 不会创建一个 $.Deferred 而是一个 Promise,这就是你不能调用 notify 的原因" FTFY
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多