3

我正在尝试从 Storm Glass API 获取数据。我正在使用他们的模板获取请求(https://docs.stormglass.io/?javascript#point-request)。

当我运行脚本时,控制台会Promise { <pending> }无限期地读出“”。所以,请求没有返回值,但我不知道为什么。有任何想法吗?

我已将我的 API 密钥替换为<My API key>

const http = require('http')
const fetch = require('isomorphic-fetch');

http.createServer((req, res) => {

////////////////////////////////////////////////App code
const lat = 58.7984;
const lng = 17.8081;
const params = 'waveHeight,airTemperature';

fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`, {
  headers: {
    'Authorization': '<My API key>'
  }
}).then(function(response) {
  // Do something with response data.
  const jsonData = response.json();
  console.log(jsonData)
});

/////////////////////////////////////////////////////////
}).listen(3000);

console.log("service running on http://localhost:3000");
4

3 回答 3

5

response.json函数返回一个 Promise,而不是反序列化的对象。您的代码应为:

fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`, {
  headers: {
    'Authorization': '<My API key>'
  }
})
.then(response => response.json())
.then(function(jsonData) {
  // Do something with response data
  console.log(jsonData)
});
于 2019-04-07T15:31:50.613 回答
1

除了 gretro 的回答之外,您可能已经有了const json = response.json()通过查看async/await代码来工作的想法,因为它非常相似,所以如果以这种方式编写代码,这就是该代码的外观。它传统上被包裹在 a 中try/catch,所以我也包含了它。

http.createServer(async (req, res) => {

  const lat = 58.7984;
  const lng = 17.8081;
  const params = 'waveHeight,airTemperature';

  try {
    const endpoint = `https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`;
    const params = { headers: { 'Authorization': '<My API key>' } };
    const response = await fetch(endpoint, params);
    const jsonData = await response.json();
    console.log(jsonData);
  } catch (err) {
    console.error(err);
  }

}).listen(3000);
于 2019-04-07T15:41:08.193 回答
0

你可以使用 async/awiat 来解决 Promise。

fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}&params=${params}`, {
  headers: {
    'Authorization': '<My API key>'
  }
})
.then(async response => {
    const jsonData = await response.json();
    console.log(jsonData)
})
于 2020-02-19T07:08:02.787 回答