- 此问题在此处已有答案**:
(41个答案)
昨天关门了。
我正在通过API从一个名为pollPowerConsumption()
的通用异步函数中调用一个名为fetchPowerConsumption()
的异步函数来轮询一些JSON数据,这样做效果很好,而且我可以从fetchPowerConsumption()
中调用console.log()
响应,它显示了有效的数据;然而,当从pollPowerConsumption()
中记录时,我总是得到"未定义"。即使我等待live_power_consumption
,它也不会从fetchPowerConsumption()
返回。
为什么Promise
没有实现?
我的代码如下:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
let mySmartThingsToken = '<hidden>';
let mySmartThingsDeviceId = '<hidden>';
pollPowerConsumption();
async function pollPowerConsumption() {
var live_power_consumption = await fetchPowerConsumption();
console.log(live_power_consumption);
}
async function fetchPowerConsumption() {
var myRequestHeaders = new Headers();
myRequestHeaders.append("Authorization", "Bearer " + mySmartThingsToken);
var myRequestOptions = {
method: 'GET',
cache: 'no-cache',
headers: myRequestHeaders,
redirect: 'follow'
};
await fetch("https://api.smartthings.com/v1/devices/" + mySmartThingsDeviceId + "/status", myRequestOptions).then(async function(response) {
// response.json() returns a promise, use the same .then syntax to work with the results
await response.json().then(async function(SmartThingsData) {
// SmartThingsData is now our actual variable parsed from the json, so we can use it
//console.log(SmartThingsData["components"]["main"]["powerMeter"]["power"]["value"]);
return SmartThingsData["components"]["main"]["powerMeter"]["power"]["value"];
});
}).catch(requestError => console.log(requestError));
}
</script>
</body>
</html>
live_power_consumption
应该返回fetchPowerConsumption()
正在提供的任何内容。
1条答案
按热度按时间czq61nw11#
fetchPowerConsumption()函数实际上没有返回任何内容。尽管它使用await和.then()语法来处理响应的异步获取和解析,但return语句位于传递给响应的.then()方法的嵌套函数中。
使用异步函数时,可以使用await关键字等待Promise的结果解析,但函数本身必须返回Promise,以便调用代码能够等待其结果。若要修复代码,可以从fetchPowerConsumption()函数返回嵌套的Promise链。