【问题标题】:Return response of jquery.deferred object when call the function调用函数时返回 jquery.deferred 对象的响应
【发布时间】:2015-05-11 19:44:05
【问题描述】:

我正在尝试创建自定义对话框,并返回用户在该对话框中单击的响应。我使用了延迟对象,但是当我调用函数时它会立即返回。

Example fiddle

当我调用函数时

var value = showDelete("Hello World");

它总是返回undefined 而不是“Ok”或“Cancel”。

我在这段代码中做错了什么。帮我。提前致谢。

【问题讨论】:

    标签: javascript jquery jquery-deferred


    【解决方案1】:

    首先,您需要从showDelete 方法返回延迟对象。

    其次,在您的事件处理程序中,变量value 是一个延迟对象,因此您需要使用done 方法来获取值。检查此代码,它似乎工作:

    function showDelete(msg){
        var defers = $.Deferred();
        jQuery.when(showAlert(msg)).done(function(){
            alert("Ok");
            defers.resolve("ok");    // resolve, not return value
        }).fail(function(){
            alert("Cancel");
            defers.resolve("cancel");   // resolve, not return a value
        }).always(function(){
            jQuery("#confirm").hide();
        })
        return defers.promise();    // return a promise
    }
    function showAlert(msg){
        var defer2 = $.Deferred();
        jQuery("#msg").html(msg);
        jQuery("#confirm").show();
        jQuery("#confirm input:first").on("click",function(){
            defer2.resolve();
        });
        jQuery("#confirm input:last").on("click",function(){
            defer2.reject();
        });
        return defer2.promise();
    }
    jQuery("#alertt").bind("click", function(){
        var value = showDelete("Hello World");
        value.done(function(result){    // use done handler
            console.log(result); //logs ok or cancel;
        });
    });
    

    此外,在您的场景中使用延迟对象似乎是不必要的。 deferred 的主要用途是简化长时间运行的异步任务(例如 AJAX)的工作,但在您的情况下,看起来没有 deferred 的方法同样有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多