我试图使用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}}承诺?
答案 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
。