如何在ajax完成回调中返回承诺?

时间:2015-02-03 23:44:35

标签: javascript jquery promise deferred

我试图使用promises延迟函数:

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()的{​​{1}}承诺?

2 个答案:

答案 0 :(得分:4)

  

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

是的,你可以!这只是then超过done的力量:chains the actions,在解析返回的承诺之前等待回调的结果(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)
},

答案 1 :(得分:0)

rend().then(function() { d.resolve(); }

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

相关问题