【发布时间】:2014-04-02 18:17:26
【问题描述】:
已经有多个问题对此有了答案,但到目前为止,这种设置都无法正常工作。
function login(u,p) {
console.log(1);
return $.post(url, {u,p});
}
function out() {
console.log(3);
//a function that does not return deferred
// clear cookies
}
function doSomething() {
console.log(2);
// a function that returns a deferred
return $.post(...);
}
var data = [{u: 'au', p: 'ap'}, {u: 'bu', p: 'bp'}]
$.each(data, function(k,v){
login(v.u, v.p).then(doSomething).then(out);
});
我期待它的顺序是这样的:
1
2
3
1
2
3
但我明白了
1
2
1
3
2
3
为什么会这样,即使我正在等待使用 then 解决的承诺
【问题讨论】:
-
$.each(data, function(k,v){没有等待下一次迭代的承诺。 -
那我该如何等待。
-
我不确定正确的方法是什么,但我会尝试使用一个递归函数,它在链
.then(theFunction(data));的末尾调用自身,并将一个元素移出数组data每个时间到没有了。 -
我想这是我上次做的,我会试试的
-
根据 AJAX 调用所花费的时间,它们可能不会按照它们被触发的顺序返回。
标签: javascript jquery ajax jquery-deferred