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

Looping ajax calls using deferred and promises

本文关键字:循环 ajax 调用 承诺 延迟      更新时间:2023-09-26

我是jquery $.Deferred的新手,似乎我不能理解关于异步处理的一大堆东西。

假设我想循环遍历用户名并登录它们,处理一些东西,然后注销(这可能不需要包含在这个问题中)。

如果我有这两个用户/通行证组合,我想循环它们,登录它们并执行必要的操作。

[{"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...
     }
}

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

是。总的来说,你做的是对的,但请注意,pipe被弃用了,而then取而代之。

以下是then的文档