【问题标题】:How to return promise in ajax done callback?如何在 ajax done 回调中返回承诺?
【发布时间】:2015-02-04 10:48:38
【问题描述】:

我正在尝试使用 Promise 来延迟函数:

load: function(){

   var d = $.Deferred();

   $.ajax(......).done(function(resp){
      if(resp.error)
        return d.reject();

      ....
      return rend(); 
   });

   return d.promise();

},

我知道$.ajax 已经返回了一个承诺,但这里render() 也会返回一个承诺,所以我不能只使用$.ajax 承诺,因为

load.then(function() {   .....  })

应该在rend() 完成后运行。

你知道我如何将rend() 承诺与d“合并”吗?

【问题讨论】:

    标签: javascript jquery promise deferred


    【解决方案1】:

    这里的 render() 也会返回一个承诺,所以我不能只使用 $.ajax 承诺,因为 load.then(function() { ..... }) 应该在 rend() 完成后运行。

    是的,你可以!这只是thendone 的力量:它chains the actions,在解决返回的promise 之前等待回调的结果(render())。

    使用

    load: function(){
      return $.ajax(…).then(function(resp){
    //                 ^^^^
        if(resp.error)
          return $.Deferred().reject(resp.error);
    
          …
          return render(); 
       }); // this will resolve with the result of your render() promise
           // (or be rejeced with the .error)
    },
    

    【讨论】:

      【解决方案2】:
      rend().then(function() { d.resolve(); }
      

      调用rend,然后使用该承诺的成功/失败来解决/拒绝d

      【讨论】:

      猜你喜欢
      • 2016-06-15
      • 2019-09-20
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多