如何 return 在 ajax 完成回调中承诺?
How to return promise in ajax done callback?
我正在尝试使用承诺来延迟函数:
load: function(){
var d = $.Deferred();
$.ajax(......).done(function(resp){
if(resp.error)
return d.reject();
....
return rend();
});
return d.promise();
},
我知道 $.ajax
已经 return 是一个承诺,但是这里 render()
也将是 return 一个承诺,所以我不能只使用 $.ajax
承诺,因为
load.then(function() { ..... })
应该 运行 在 rend() 完成后。
你知道我怎么能 "merge" rend()
与 d
的承诺吗?
rend().then(function() { d.resolve(); }
调用 rend
,然后使用该承诺的 success/failure resolve/reject d
。
here render() will also return a promise so I cannot just use the $.ajax promise because load.then(function() { ..... })
should run after rend() completes.
是的,你可以!这就是 then
over done
: it 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)
},
我正在尝试使用承诺来延迟函数:
load: function(){
var d = $.Deferred();
$.ajax(......).done(function(resp){
if(resp.error)
return d.reject();
....
return rend();
});
return d.promise();
},
我知道 $.ajax
已经 return 是一个承诺,但是这里 render()
也将是 return 一个承诺,所以我不能只使用 $.ajax
承诺,因为
load.then(function() { ..... })
应该 运行 在 rend() 完成后。
你知道我怎么能 "merge" rend()
与 d
的承诺吗?
rend().then(function() { d.resolve(); }
调用 rend
,然后使用该承诺的 success/failure resolve/reject d
。
here render() will also return a promise so I cannot just use the $.ajax promise because
load.then(function() { ..... })
should run after rend() completes.
是的,你可以!这就是 then
over done
: it 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)
},