为什么 "Promise { <pending> }" 没有解决?
Why is "Promise { <pending> }" not resolving?
我正在尝试从 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}¶ms=${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");
response.json
函数return一个Promise,不是反序列化的对象。您的代码应为:
fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}¶ms=${params}`, {
headers: {
'Authorization': '<My API key>'
}
})
.then(response => response.json())
.then(function(jsonData) {
// Do something with response data
console.log(jsonData)
});
除了 gretro 的回答,您可能已经想到 const json = response.json()
可以通过查看 async/await
代码来工作,因为它非常相似,所以如果这样写,代码可能会这样方法。它传统上包含在 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}¶ms=${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);
您可以使用 async/awiat 解决承诺。
fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}¶ms=${params}`, {
headers: {
'Authorization': '<My API key>'
}
})
.then(async response => {
const jsonData = await response.json();
console.log(jsonData)
})
我正在尝试从 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}¶ms=${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");
response.json
函数return一个Promise,不是反序列化的对象。您的代码应为:
fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}¶ms=${params}`, {
headers: {
'Authorization': '<My API key>'
}
})
.then(response => response.json())
.then(function(jsonData) {
// Do something with response data
console.log(jsonData)
});
除了 gretro 的回答,您可能已经想到 const json = response.json()
可以通过查看 async/await
代码来工作,因为它非常相似,所以如果这样写,代码可能会这样方法。它传统上包含在 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}¶ms=${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);
您可以使用 async/awiat 解决承诺。
fetch(`https://api.stormglass.io/point?lat=${lat}&lng=${lng}¶ms=${params}`, {
headers: {
'Authorization': '<My API key>'
}
})
.then(async response => {
const jsonData = await response.json();
console.log(jsonData)
})