使用延迟和承诺循环ajax调用

时间:2013-05-02 17:58:42

标签: javascript jquery ajax loops jquery-deferred

我是jquery $.Deferred的新手,似乎我无法理解有关异步处理的大量内容。

假设我想循环访问用户名并登录它们,处理某些内容并注销(这可能不需要包含在此问题中)。

如果我有这2个用户/通行证组合,我想循环浏览它们,登录它们并采取必要的行动。

[{"username":"user1","password":"HardToKnow"},
 {"username":"user2","password":"HardToKnow"}]

我已经根据我读到的内容创建了这个功能,虽然我不确定它是如何工作的。

function login(user, pass) {
    var d = $.Deferred();
    $.post(
        'http://www.domain.com/login',
        {
            user: user,
            passwrd: pass
        }
    ).done(function(s){
            d.resolve(s);
    }).fail(d.reject);

    return d.promise();
}

上面的功能显然是登录,现在我将有另一个必须有另一个异步请求的功能。

function setTodo(user,pass) {
    return login(user,pass)
           .pipe(function(s){
                if (s.indexOf('<li class="greeting">Hello <span>' + user + '</span></li>')) {
                    return $.post().....?

                }
                return set(usr, pw);
           });
}

上面的那个功能,虽然不完整,但我只是想法,会尝试设置一个待办事项,然后将调用另一个函数来提交或完成待办事项

function submit(user, pass) {
     return setTodo(user, pass)
            .pipe(function(s){
            // another $.post() here...
     }
}

问题,我做得对吗?延期? 如何循环登录凭据?我尝试使用$ .each和ajax请求它们,但正如预期的那样,它们同时执行,因为它是异步的。

1 个答案:

答案 0 :(得分:1)

是。总的来说,你做得对,但请注意pipe被弃用,而不是then

这是the documentation of then.