2014-07-16 37 views
1

我正在使用我的第一个节点模块,并且在函数中使用变量时遇到了一些问题。第一个控制台日志给了我我的数据,但第二个控制台日志给我未定义。nodejs全局变量不能按预期工作

module.exports = { 
    getClient: function() { 
    var options_auth={user: username, password: password}; 

    return new Client(options_auth); 
    }, 

    getTestCaseById: function(client, args, testCaseId) { 
    var restResponse; 
    url = baseurl + "testcase/" +testCaseId; 

    client.get(baseurl + "testcase/" +testCaseId, args, function(data, response) { 
     restResponse = data; 
     console.log(data); 
    }); 

    console.log(restResponse); 
    } 
}; 

关于我在做什么错误restResponse变量的想法。

回答

1

这是因为.get调用是异步的。 client.get函数后面的console.log在该数据调用仍在进行时运行。一次呼叫完成后,该呼叫中的那个呼叫就会运行 - 称为回调函数。

在回调中执行所有工作以使用返回的数据,或将返回的数据传递给另一个函数。

返回数据:

getTestCaseById(client, args, testCaseId, function(response) { 
    console.log(response); //your returned data 
}); 

getTestCaseById: function(client, args, testCaseId, callback) { 
    var restResponse; 
    url = baseurl + "testcase/" +testCaseId; 

    client.get(baseurl + "testcase/" +testCaseId, args, function(data, response) { 
     restResponse = data; 
     callback(data) 
    }); 
} 

然后在传递一个回调