javascript - JQuery Promise .notify 需要关闭...

标签 javascript jquery closures jquery-deferred

我认为我在关闭/范围界定方面遇到问题。当我观察 MyObject 的进度时,我总是得到 i 的最终值。

示例

var a = new MyObject();
a.progress(function(msg){console.log(msg)}); // always prints 1000/1000

可观察对象

    function MyObject()
    {
       var this.dfd = $.Deferred();
      return this.dfd.promise();
    } 

    MyObject.prototype.aProcess = function()
        {
            var self = this;
            for (var i = 0; i < 1000; i++)
            {
                (function(i)
                {

                   self.notify("Updating " + (i+1) + "/" + 1000); 
                   // Bunch of Processes

                })(i);
            }
        }

    MyObject.prototype.notify = function(message)
    {
        console.log(message) // works fine
        this.dfd.notify(message);   
    }

Demo

最佳答案

您在返回延迟之前正在执行.process,因此当您附加进度监听器时,通知已经运行。

试试这个:

http://jsfiddle.net/Xe47R/2/

function MyObject() {
    this.dfd = $.Deferred();
    //Don't explicitly return an object, otherwise the class is useless.
};
MyObject.prototype.process = function() {
    //The closure was useless here
    for (var i = 0; i < 1000; i++) {
        this.notify("Updating " + (i + 1) + "/" + 1000);
    }
};
MyObject.prototype.notify = function(message) {
    //Remove console.log from here to avoid confusion
    this.dfd.notify(message);
}
var a = new MyObject();
a.dfd.promise().progress(function(msg) {
    console.log(msg)
}); // always prints 1000/1000
a.process();​

关于javascript - JQuery Promise .notify 需要关闭...,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12107924/

相关文章:

javascript - Selenium WebDriverJS,无法为 Chrome 构建 webdriver

javascript - 我可以使用 Javascript 添加/删除 li 的类吗?

javascript - 为什么比较三个数组元素返回 false

javascript - 在 Javascript 构造函数中引用实例变量

javascript - 表单未在 ajax 从 php 返回的 html 数据中提交

javascript - lodash绑定(bind)函数用作jQuery事件处理程序...可能吗?

php - json 字符串化为 php

javascript - parent.jQuery.fancybox.close();从 Fancybox 内部只关闭 Fancybox 一次

ios - 在 Swift 中链接多个异步函数

java - groovy 中的闭包与 java 8 中的闭包(lambda 表达式)?