节点提取返回Promise {<pending>}而不是所需的数据

时间:2017-04-14 13:02:11

标签: javascript json node.js node-fetch

我目前正在尝试使用node-fetch模块从网站获取JSON,并且已经实现了以下功能:

var fetch = require("node-fetch");

function getJSON(URL) {
  return fetch(URL)
    .then(function(res) {
      return res.json();
    }).then(function(json) {
      //console.log(json) logs desired data
      return json;
  });
}

console.log(getJson("http://api.somewebsite/some/destination")) //logs Promise { <pending> }

当它被打印到控制台时,我只是收到Promise { <pending> } 但是,如果我从最后一个.then函数将变量json打印到命令行,我会得到所需的JSON数据。有没有办法返回相同的数据?

(如果这只是我的一个误解问题,我事先道歉,因为我对Javascript很新)

1 个答案:

答案 0 :(得分:0)

JavaScript Promise是异步的。你的功能不是。

当你打印函数的返回值时,它会立即返回Promise(仍然是未决的)。

示例:

var fetch = require("node-fetch");

// Demonstational purpose, the function here is redundant
function getJSON(URL) {
  return fetch(URL);
}

getJson("http://api.somewebsite/some/destination")
.then(function(res) {
  return res.json();
}).then(function(json) {
  console.log('Success: ', json);
})
.catch(function(error) {
  console.log('Error: ', error);
});