无法从function node.js访问值
我试图访问node.js中函数返回的内容 我有以下功能:无法从function node.js访问值,node.js,Node.js,我试图访问node.js中函数返回的内容 我有以下功能: function getImg(callback) { https.get('https://api.nasa.gov/planetary/apod?api_key=api-key', response => { let data = ""; response.on('data', chunk => { data += chunk; }); response.on('end',
function getImg(callback) {
https.get('https://api.nasa.gov/planetary/apod?api_key=api-key', response => {
let data = "";
response.on('data', chunk => {
data += chunk;
});
response.on('end', () => {
let img = JSON.parse(data).hdurl;
callback(null, img);
})
}).end();
}
let image = getImg(function(err, image) {
console.log(image);
})
res.render('index', {
indexCSS: true,
image
})
它可以将它正确地记录到控制台,但是如果我想像在代码的最后一行那样访问变量的值,或者如果我console.log(image)
我得到未定义的
我做错了什么。如何访问函数生成的内容?它是一个回调类型的函数,不会返回任何内容。最好将其转换为promise style,并使用
async/await
获取变量中的值
function getImg() {
return new Promise((resolve, reject) => {
https.get('https://api.nasa.gov/planetary/apod?api_key=api-key', response => {
let data = "";
response.on('data', chunk => {
data += chunk;
});
response.on('end', () => {
let img = JSON.parse(data).hdurl;
resolve(img);
})
}).end();
});
}
(async() => {
let image = await getImg();
res.render('index', {
indexCSS: true,
image
});
})();
你不能像那样存储函数的返回值。不幸的是,JS是非阻塞的,因此代码将在有机会从https请求返回该值之前继续执行。我不确定调用此函数的确切时间,但在调用getImg()后,可以在回调响应中调用
res.render
,而不必将其值赋给某个对象。您可以使用承诺,否则最好在回调返回响应时处理所需的响应。这只是一个简单的调用,如:
getImg(function(err, image) {
res.render('index', {
indexCSS: true,
image
});
})
在调用此函数的任何路由中。您只是不能以正常方式将回调中的任何类型的返回值分配给变量(至少不建议这样做)