【发布时间】:2015-08-12 23:30:23
【问题描述】:
我有一组异步函数,其中每个组都依赖于前一组的结果,但在一个组内,函数可以按任何顺序执行/解析。
如何在没有嵌套级别的情况下按顺序调用函数组?
function waste(secs)
{
var prom=$.Deferred();
setTimeout(function(){
$('body').append('<p>'+secs+'</p>');
prom.resolve();
}, secs*1000);
return prom;
}
$.when(
waste(5),
waste(4)
).then(function(){
$.when(
waste(3),
waste(2)
).then(function(){
$.when(
waste(1),
waste(0)
).then(function(){
$('body').append('<p>done</p>');
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
以下是我目前想出的,但它在每个部分都有一种尴尬的return $.when(缩进:
function waste(secs)
{
var prom=$.Deferred();
setTimeout(function(){
$('body').append('<p>'+secs+'</p>');
prom.resolve();
}, secs*1000);
return prom;
}
$.when(
waste(5),
waste(4)
).then(function(){
return $.when(
waste(3),
waste(2)
);
}).then(function(){
return $.when(
waste(1),
waste(0)
);
}).then(function(){
$('body').append('<p>done</p>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
在一组异步函数中的所有方法都需要在下一组执行之前完成的情况下,对异步函数组进行排序的最佳实践方法是什么?
我想理想情况下,我希望这样的事情能奏效:
$.when(
waste(5),
waste(4)
).when(
waste(3),
waste(2)
).when(
waste(1),
waste(0)
).then(function(){
$('body').append('<p>done</p>');
});
【问题讨论】:
-
return $.when解决问题了吗? -
@guest271314 从技术上讲,它确实解决了嵌套问题,但是在每个函数调用之间有
).then(function(){return $.when(似乎相当麻烦,我不确定如果请求失败它会如何工作,所以我试图找到“标准”的方式来做到这一点。 -
见
.then(doneCallbacks, failCallbacks)api.jquery.com/deferred.then/… -
@guest271314 是的,我想我在想“whens”甚至没有“thens”,但我想你可以在每个上添加一个 then 并且只将它传递给 failcallbacks跨度>
-
查看帖子以了解添加
.fail()、.then(success, err)回调的一种方法。
标签: javascript jquery asynchronous promise