【发布时间】:2021-09-19 17:13:32
【问题描述】:
在尝试使用新的 Forge Datavisualization API 将我的自定义数据添加到热图中,但我在尝试使用异步函数将数据链接到热图时遇到问题。
我想在getSensorValue 回调中调用异步获取函数。如果我只返回一个 Math.random() 它可以工作:
function getSensorValue(surfaceShadingPoint, sensorType) {
return Math.random();
}
但每当我尝试添加任何等待函数时,它都不会呈现任何表面阴影:
[...]
function normalizeValue(value, min, max) {
return (value - min) / (max - min);
}
async function getSensorValue(surfaceShadingPoint, sensorType) {
let data = await asynchronousFunction();
data = data[data.length-1]
let temperature = (data[0].temperature);
return normalizeValue(temperature,19,37);
}
[...]
setInterval(async function () {
const floorName = 'A1_Level 1';
dataVizExt.renderSurfaceShading(floorName, sensorType, await getSensorValue);
}, 1000);
而且我也尝试过使用这样的 Promises 但没有成功...:
function getSensorValue(surfaceShadingPoint, sensorType) {
return (promise = new Promise((resolve, reject) => {
resolve(asynchronousFunction());
}));
}
function normalizeValue(value, min, max) {
return (value - min) / (max - min);
}
setInterval(function () {
const floorName = 'A1_Level 1';
dataVizExt.renderSurfaceShading(floorName, sensorType, () =>
getSensorValue().then((res) => {
let data = res;
data = data[data.length - 1];
let temperature = data.temperature;
return normalizeValue(temperature,22,40);
})
);
}, 1000);
我对 API 有什么误解还是我搞乱了我的 JS 异步逻辑?
【问题讨论】:
-
问题是,您将
await getSensorValue作为函数参数传递给dataVizExt.renderSurfaceShading...因为getSensorValue不是承诺,没有什么可等待的,所以,该行可能是好吧,dataVizExt.renderSurfaceShading(floorName, sensorType, getSensorValue);显然是行不通的,因为你的getSensorValue的调用者期望的是一个值,而不是一个 Promise - 我看不到它的解决方法