【问题标题】:jquery deferred for async methodsjquery 延迟异步方法
【发布时间】:2013-03-06 04:25:34
【问题描述】:

我有一个内部进行ajax调用的函数,并且有成功和失败的回调方法。

function dothis() {
    object.getMyData(x,y,successCallback,failureCallback);
}

该函数立即返回,因为 getMyData 是一个异步的。现在我希望函数 dothis 等到 successCallback 或 failureCallback 被执行。如何使用 deferred 呢?

【问题讨论】:

    标签: jquery jquery-deferred


    【解决方案1】:

    ajax 已经返回一个 deferred,所以你可以使用它。你可以更改getMyData 以返回ajax 返回的延迟吗?

    function getMyData() {
        return ajax({
            // ajax params
        });
    }
    
    function dothis() {
        // return deferred which comes from ajax
        return object.getMyData(x,y,successCallback,failureCallback); 
    }
    
    dothis().done(function(){
        // do something on success
    }).fail(function(){
        // do something on failure
    });
    

    如果您无法更改 getMyData 以返回延迟,您可以这样做:

    function dothis() {
        var dfd = $.Deferred();
        object.getMyData(x,y,function(){
            dfd.resolve(); // success
        },function(){
            dfd.reject();  // fail
        });
        return dfd.promise(); 
    }
    
    dothis().done(function(){
        // do something on success
    }).fail(function(){
        // do something on failure
    });
    

    【讨论】:

      【解决方案2】:

      看起来您不需要异步调用。

      您是否尝试进行同步调用,然后执行成功/失败功能?请澄清。

      谢谢,

      @leo

      同步调用示例>

      $.ajax({
              type: "GET",
              url: remote_url,
              async: false,
              success : function(data) {
                  remote = data;
              }
          });
      

      【讨论】:

        【解决方案3】:

        我更喜欢你使用 jquery deferred 的 $.when 和 $.then 组合。

        您可以访问this

        你也可以在stackoverflow找到相关答案。

        【讨论】:

          猜你喜欢
          • 2021-02-14
          • 2018-06-13
          • 1970-01-01
          • 2016-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-13
          • 1970-01-01
          相关资源
          最近更新 更多