OpenLayers 3/Javascript:为什么会有一个;延迟“;当我的数组被填充时?

OpenLayers 3/Javascript:为什么会有一个;延迟“;当我的数组被填充时?,javascript,openlayers,geoserver,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: [feat

我是一个试图通过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;
}
我现在的问题是,features数组的填充速度不够快。如果我在“returnfeatures”设置断点(使用firebug),数组将为空。如果我等待2秒钟并将鼠标悬停在变量“features”上,数组将填充预期的元素。 所以我的问题是: 我认为这可能是由于异步请求造成的问题。 如何以正确的方式返回填充的数组


提前感谢

异步调用中可能会出现延迟。解决此问题的一种方法是仅在异步调用完成后调用下一个连续步骤。我在代码中添加了回调函数()。比如说

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()不返回任何内容。但是,当异步调用获取数据时,它将执行回调函数(),这是逻辑的下一步。

异步调用中可能存在延迟。一种处理方法是仅在异步调用完成后调用下一个连续步骤。我在代码中添加了回调函数()。比如说

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()不返回任何内容。但是,当异步调用获取数据时,它将执行回调函数(),这是逻辑的下一步。

执行异步请求时,“延迟”可能是请求发送到服务器、让服务器处理请求所需的时间,然后接收来自server@Patrick巴尔:是的,我想这也是原因。但是如何处理呢?您正在执行一个异步请求,“延迟”可能是您的请求发送到服务器,让服务器处理请求,然后从服务器接收响应所需的时间server@Patrick巴尔:是的,我想这也是原因。但是如何处理呢?嗨,尽管我以前添加了回调函数,但它从来都不起作用。也许是因为我在函数末尾调用了它们。但这种方式正如预期的那样,谢谢!嗨,尽管我以前添加了回调函数,但它从来都不起作用。也许是因为我在函数末尾调用了它们。但这种方式正如预期的那样,谢谢!