JSON 变量 returns 未定义
JSON variable returns Undefined
抱歉给您带来不便,我是 Node.js 的新手。我正在尝试将 json 存储在“usersData”变量中,因此我想稍后在其他函数中使用它。问题是,如果我在“if”中用 console.log 测试变量,结果是 returns,但是当试图在请求子函数之外显示变量时,结果是 '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
}
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);
});
这里有一些你需要知道的东西,
request
是一个异步函数,这意味着它 运行 在后台运行而不阻塞主线程,所以回调函数在请求完成后执行,这就是为什么 body 的值被分配给 userData 并且在打印时给出一些价值。
但是当在回调函数之外打印时,它给出未定义,因为 request
异步需要时间才能完成,运行 在后台。因此,在正文分配给 userData
之前的安慰语句 运行s 等打印时给出未定义。
抱歉给您带来不便,我是 Node.js 的新手。我正在尝试将 json 存储在“usersData”变量中,因此我想稍后在其他函数中使用它。问题是,如果我在“if”中用 console.log 测试变量,结果是 returns,但是当试图在请求子函数之外显示变量时,结果是 '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
}
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);
});
这里有一些你需要知道的东西,
request
是一个异步函数,这意味着它 运行 在后台运行而不阻塞主线程,所以回调函数在请求完成后执行,这就是为什么 body 的值被分配给 userData 并且在打印时给出一些价值。
但是当在回调函数之外打印时,它给出未定义,因为 request
异步需要时间才能完成,运行 在后台。因此,在正文分配给 userData
之前的安慰语句 运行s 等打印时给出未定义。