我使用此request
模块在Nodejs中发出HTTP请求
示例代码:
module.exports.getToken = function(){
var token ;
request(validLoginRequest, function(err,resp,body){
var json = JSON.parse(JSON.stringify(body));
console.log("from request(): token=" + json.accesstoken);
token = json.accesstoken;
});
console.log("getToken() returns:" + token);
return token;
}
但token
始终是undefined
。我做错了什么?
答案 0 :(得分:6)
你已陷入经典节点异步陷阱。模块的顶级函数中的代码将在内部请求函数中的回调发生之前返回。返回时尚未定义令牌。
最简单的解决方案是从外部函数传递回调并从返回到请求函数的回调中调用它。如果这不令人满意,你可以使用$ q库来返回一个promise或找到一个可以进行同步http调用的模块。
答案 1 :(得分:2)
根据@Robert Moskal的回复重新编写代码。
module.exports.getToken = function(callback){
request(validLoginRequest, function(err,resp,body){
var token ;
var json = JSON.parse(JSON.stringify(body));
console.log("from request(): token=" + json.accesstoken);
token = json.accesstoken;
console.log("getToken() returns:" + token);
callback(token);
});
}