Как заставить функцию работать после того, как forEachTileCoord обработал все плитки?
Я писал скрипт для перекрашивания слоя WMTS на основе отображаемых в данный момент плиток. Скрипт просматривает все плитки, чтобы определить их максимальные значения, а затем раскрашивает плитки на основе наибольшего значения в любой из отображаемых плиток. Окрашивающая часть работает нормально, но не ждет, пока все плитки будут обработаны.
В моем коде, прикрепленном внизу, последняя половина не должна срабатывать, пока все плитки не были обработаны. Я предполагаю, что мне нужно будет использовать Promises . Проблема в том, что я не знаю, как определить, когда forEachTileCoord закончен.
map.on("moveend", function() {
var tileUrlFunction = tileSource.getTileUrlFunction()
var maxValues = [];
var loadExtent = map.getView().calculateExtent(map.getSize());
//Checks which tiles that currently are being displayed
tileSource.getTileGrid().forEachTileCoord(loadExtent, mapZoom, function(tileCoord) {
//Gets the name of each currently displayed tile
tileName = tileUrlFunction(tileCoord, ol.proj.get('EPSG:4326'))
asyncCall()
async function asyncCall() {
tileMaxValue = await calculateMaxValue(tileName);
maxValues.push(tileMaxValue)
}
})
//This next part triggers too early - returns -Infinity
currentMax = Math.max(...maxValues)
if (Number.isInteger(currentMax)) {
//This is the function for recoloring the map
olgt_map.redraw(olgt_map, currentMax, colorScale);
}
}
Функция перерисовки изменяет значения легенды и распределение окраски слоя, как показано здесь . Два скриншота - это две разные области одной и той же карты. Легенда и окраска корректируются до максимального значения, отображаемого в данный момент.
olGeoTiff.prototype.redraw = function(map, currentMax, legendValues) {
map.plotOptions.domain = [0, currentMax];
this.layer.getSource().refresh();
updateLegend(legendValues, currentMax);
}