编程语言
首页 > 编程语言> > javascript-使用deferred链接具有多个ajax调用的循环

javascript-使用deferred链接具有多个ajax调用的循环

作者:互联网

关于此问题,已经有多个问题已经解决,但是到目前为止,这种设置都无法解决.

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

为什么会这样呢,即使我正在等着用

解决方法:

如果您希望登录同步运行:

var p = new jQuery.Deferred();
$.each(data, function(k,v){
  p.then(function() {
    return login(v.u, v.p);
  }).then(doSomething).then(out);
});

$中迭代的每个新项目,直到p完成最后一个为止,每个新项目都不会触发新响应.

标签:ajax,jquery-deferred,javascript,jquery
来源: https://codeday.me/bug/20191121/2055335.html