【问题标题】:Looping ajax calls using deferred and promises使用延迟和承诺循环 ajax 调用
【发布时间】:2013-04-27 00:22:13
【问题描述】:

我是 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 请求它们,但正如预期的那样,它们同时执行,因为它是异步的。

【问题讨论】:

  • $.ajax 调用已经返回承诺对象!无需手动构建延迟d。顺便说一句,您应该更喜欢.then 而不是已弃用的.pipe

标签: javascript jquery ajax loops jquery-deferred


【解决方案1】:

是的。总体而言,您做得对,但请注意 pipe 已被弃用,取而代之的是 then

这里是the documentation of then.

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 2014-06-11
    • 2015-03-16
    • 2016-09-03
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 2013-02-15
    相关资源
    最近更新 更多