如何使用async.series等待响应?

时间:2014-09-19 06:25:20

标签: javascript node.js asynchronous superagent

昨天我发布了这个问题:https://stackoverflow.com/questions/25919099/how-do-i-use-callback-to-solve-authentication-issue

基本上我想等待我的登录请求的响应,然后转到Checkin请求。否则,签入请求会给出401认证错误。

现在我正在尝试使用某些库,如step,wait.for或async来等待响应。使用async.series我正在尝试使用此代码,但它在unexpected token function

时出现function two()错误
function checkin() {

    async.series[(
                function one() {
                    agent1
                        .post(login-url)
                        .type('form') // send request in form format
                        .send({
                            username: username,
                            password: password
                        })
                        .end(function(err, res) {
                            console.log("response for login is ", res.statusCode, " ", res.message);
                        });
                }

                function two() {
                    for (var i = 0; i < count; i++) {
                        if (validatePayment(rows[i].Payment) == true && validateMobile(rows[i].Mobile) == true) {
                            console.log("inside validation");
                            agent1
                                .post(checkin-url)
                                .send({
                                    phone: rows[0].Mobile,
                                    outlet: outletID
                                        //outlet: "rishi84902bc583c21000004"
                                })
                                .end(function(err, res) {
                                    console.log("response for checkins is ", res.statusCode, " ", res.message);
                                });
                        )];
                }
            }
        }
        //    });
}

1 个答案:

答案 0 :(得分:1)

您正在收到意外的令牌错误,因为您正在尝试在带括号的表达式中定义多个函数。在你的控制台中尝试这一行:

(function one() {} function two() {})

此处发生的是您尝试访问async.series,例如它是一个数组或其他内容:

async.series[ ...index here... ]

然后,对于索引,您传递表达式:

async.series[ (...) ];

表达式谬误地包含两个函数定义:

async.series[ ( function one() { ... } function two() { ... } ) ]

带括号的表达式只能返回一个值。两个函数将竞争成为返回值,因此无效。但是,你所做的一切都是错误的。

我认为您的真正含义是致电async.series,并传递array functions ...

async.series( [ function one() {...}, function two() {...} ] );

您的更新代码可能如下fiddle