很抱歉给您带来不便,我是Node的新手。我试图将json存储在“ usersData”变量中,因此我想稍后在其他函数中使用它。问题是,如果我使用console.log在“ if”中测试变量,它将返回给我结果,但是当尝试在request子函数之外显示变量时,结果为“ undefined”。我已经声明了全局usersData变量,如下所示。谢谢。
var usersData;
function getAllUsers(){
request({url, json: true}, function (error, response, body) {
if (!error && response.statusCode == 200) {
usersData = body
//console.log(usersData) //Here returns a value
}
});
console.log(usersData) //here returns undefined
}
答案 0 :(得分:0)
request
是异步方法,因此如果以后要在其他函数中使用其结果,则应在第二个参数回调中处理。即
var usersData;
var handleUserData = function() {};
function getAllUsers(){
request({url, json: true}, function (error, response, body) {
if (!error && response.statusCode == 200) {
usersData = body
//console.log(usersData) //Here returns a value
// use results in another function
handleUserData(body);
}
});
}
或使用Promise
function getAllUsers() {
return new Promise(function(resolve, reject) {
request({url, json: true}, function (error, response, body) {
if (!error && response.statusCode == 200) {
usersData = body
//console.log(usersData) //Here returns a value
resolve(body);
} else {
reject(error);
}
});
});
}
// handle `usersData`
getAllUsers().then(body => {
handleUserData(body);
});
答案 1 :(得分:0)
以下是您需要了解的一些内容,
request
是一个异步函数,这意味着它在后台运行而不会阻塞主线程,因此回调函数在请求完成后执行,这就是为什么body的值分配给userData并在打印时给出一些值的原因。>
但是在回调函数之外进行打印时,由于request
被异步处理,因此它给出了undefined,它需要时间来完成在后台运行。因此,安慰声明在将正文分配给userData
之前运行,因此在打印时给出未定义的内容。