无法从function 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',

我试图访问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', () => {
      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
  });
})
在调用此函数的任何路由中。您只是不能以正常方式将回调中的任何类型的返回值分配给变量(至少不建议这样做)