Aes*_*ete 18 javascript jquery promise jquery-deferred
我的情况是我的ajax调用必须按特定顺序执行.我在其他情况下使用过jQuery Deferred对象,但似乎无法找到使这种行为适当的方法.
我有一个函数,它ajax在它的生命周期中执行许多请求.某些请求将在成功回调其他请求期间执行.
我的问题:有没有办法将所有嵌套的延迟对象返回到原始$.when调用?
一个简化的例子是:
function nestedAjax() {
$.get("/", function(){
console.log("First ajax done.");
$.get("/", function(){
console.log("Second ajax done.");
});
});
};
Run Code Online (Sandbox Code Playgroud)
我试图nestedAjax使用这个功能,$.when()并$.done()喜欢这样:
$.when(nestedAjax()).done(function(){
console.log("Complete");
});?
Run Code Online (Sandbox Code Playgroud)
控制台输出读数:
> First ajax done.
> Second ajax done.
> Complete.
Run Code Online (Sandbox Code Playgroud)
我可以返回第一个get实现这个目的:
> First ajax done.
> Complete.
> Second ajax done.
Run Code Online (Sandbox Code Playgroud)
但显然这不是我要求的.任何帮助,将不胜感激.
DrC*_*sos 14
它实际上非常简单.尽管所有AJAX调用都是Deferred对象,但我仍然使用一个方法本身.
function nestedAjax() {
var dfd = $.Deferred();
$.get("/echo/json/", function(){
console.log("First ajax done.");
$.get("/echo/json/", function(){
console.log("Second ajax done.");
dfd.resolve();
});
});
return dfd.promise();
};
Run Code Online (Sandbox Code Playgroud)
您实际上并不需要额外的延迟对象.你可以通过链接来做你想做的事then():
function nestedAjax() {
return $.get("/echo/json/").then(function(result1){
console.log("First ajax done.");
if (result1) {
return result1;
} else {
return $.get("/echo/json/").then(function(nestedResult){
console.log("Second ajax done.");
return nestedResult;
});
}
});
};
Run Code Online (Sandbox Code Playgroud)
我添加了一些逻辑,因为我认为这可能是您同步执行此操作的原因.之后你可以$.when像这样使用结果:
$.when(nestedAjax(), $.get("/something/else")).then(function(nested, other) {
console.log("Complete.", nested, other);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11634 次 |
| 最近记录: |