无法访问节点js中函数外部的响应对象数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法访问节点js中函数外部的响应对象数据相关的知识,希望对你有一定的参考价值。

我正在使用节点js并调用spotify API并在body对象中接收响应,如下面的代码所示:

    var options = {
          url: 'https://api.spotify.com/v1/me',
          headers: { 'Authorization': 'Bearer ' + access_token },
          json: true
    };
    request.get(options, function(error, res, body) {
          console.log(body)
    });

这给了我输出:enter image description here

但是现在当我尝试访问函数外部的body对象时,我得到了未定义。我认为问题在于我正在进行异步调用,因此在收到响应之前,执行我在函数外部使用body变量的语句。但我对如何找到解决方案感到有点困惑。

任何帮助表示赞赏

编辑:

    request.get(options, function(error, res, body) {
        console.log(body)
        response.render('user_account.html', {
                data: body
        })
    });

它给出了输出:

enter image description here

答案

使用承诺。

您可以尝试以下方法:

const apiCall = () => {
  return new Promise((resolve, reject) => {
    var options = {
          url: 'https://api.spotify.com/v1/me',
          headers: { 'Authorization': 'Bearer ' + access_token },
          json: true
    };
    request.get(options, function(error, res, body) {
          if(error) reject(error);
          console.log(body);
          resolve(body);
    });
  });
}

apiCall().then((body) => {
    // do your things here
})
.catch((err) => console.log(err));

以上是关于无法访问节点js中函数外部的响应对象数据的主要内容,如果未能解决你的问题,请参考以下文章

js函数表达式和函数声明的区别

如何从片段中的 JSON 响应中的对象获取数据

JS---闭包

Firebase 函数和外部节点包

php作用域

无法从 TS 文件访问外部 JS 文件的功能