OpenLayers 3 / Javascript:当我的阵列被填满时为什么会出现“延迟”?

时间:2017-06-08 15:51:25

标签: javascript openlayers geoserver

我是一个试图通过geoserver和openlayers3访问数据的javascript-noob。这是我的代码:

function loadData(featureName)
{
var features = [];

var featureRequest = new ol.format.WFS().writeGetFeature({
    srsName: 'EPSG:4326',
    featurePrefix: 'progeo16',
    featureTypes: [featureName],
    outputFormat: 'application/json'
});

fetch('http://...:8080/geoserver/wfs', {
    method: 'POST',
    body: new XMLSerializer().serializeToString(featureRequest)
}).then(function(response) {
    return response.json();
}).then(function(json) {
    features = new ol.format.GeoJSON().readFeatures(json);
});

return features;
}

我现在的问题是,feature-array不会“快速”填充。如果我在“返回功能”中设置断点(使用firebug)数组将为空。如果我等待2秒并将鼠标悬停在变量“features”上,则数组将填充预期的元素。 所以我的问题是: 我认为由于异步请求可能会出现问题。 我怎样才能以正确的方式返回填充的阵列?

提前致谢

1 个答案:

答案 0 :(得分:0)

异步调用可能有延迟。处理它的一种方法是在异步调用完成后调用下一个连续步骤。我在你的代码中添加了callback_function()。例如

function loadData(featureName,callback_function)
{
var features = [];

var featureRequest = new ol.format.WFS().writeGetFeature({
    srsName: 'EPSG:4326',
    featurePrefix: 'progeo16',
    featureTypes: [featureName],
    outputFormat: 'application/json'
});
fetch('http://...:8080/geoserver/wfs', {
    method: 'POST',
    body: new XMLSerializer().serializeToString(featureRequest)
}).then(function(response) {
    return response.json();
}).then(function(json) {
    features = new ol.format.GeoJSON().readFeatures(json);
    callback_function(features);
});
}

然后使你的函数loadData()不返回任何内容。但是当你的异步调用获取数据时,它将执行callback_function(),这是你逻辑的下一步。