通过Node异步调用设置变量的正确模式

时间:2014-08-03 16:31:43

标签: javascript node.js asynchronous

我正在做一个HTTP帖子,它会返回单个10-15个字符的字符串。我想将此值赋给临时变量并在构建另一个包含所述10-15位字符串的较大字符串时使用它。

我通过将temp变量(" ticket")设为全局来实现这一点,我不喜欢这样:

var ticket; // Global. Lame.


...stuff happens

getTicket("someUser", function(err) {
    if(err) 
       {console.log("problem");}
    else
       {console.log(ticket);}   
});

...other stuff happens

// Helper functions down here....

var getTicket = function (userName, callback) {

  var user = userName;   
  request.post( 
        {
            url: 'http://somewhere',
            form: { 'username': user }
        },
        function(err, response, body) {
            if(err) {
                callback(err);
                return;
            } else {
                ticket = body;        
            }
            callback(null);
        });
}

有人能指出我正确的模式来返回POST回调中的变量ticket(或body变量,无论如何)ala:

_ticket = getTicket("someuser")

非常感谢。

1 个答案:

答案 0 :(得分:0)

您将ticket作为参数传递给回调:

getTicket("someUser", function(err, ticket) {
    if(err) 
       {console.log("problem");}
    else
       {console.log(ticket);}   
});

function getTicket (userName, callback) {

    var user = userName;   
    request.post( 
        {
            url: 'http://somewhere',
            form: { 'username': user }
        },
        function(err, response, body) {
            if(err) {
                callback(err);
                return;
            }
            callback(null, body); // body contains the ticket
        });
}

request.post是异步的,所以没有一种模式可以让你得到类似的东西:

_ticket = getTicket("someuser")