OpenLayers 3/Javascript:为什么我的数组填满后会有一个"delay"?
OpenLayers 3/Javascript: Why is there a "delay" when my array is filled?
我是一个 javascript-noob,试图通过 geoserver 和 openlayers3 访问数据。这是我的代码:
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;
}
我现在的问题是,功能数组"fast" 填充得不够。如果我在 "return features;" 处设置断点(使用 firebug),数组将为空。如果我等待 2 秒并将鼠标悬停在变量 "features" 上,则数组将填充预期的元素。
所以我的问题是:
我认为这可能是由于异步请求导致的问题。
我怎样才能 return 以正确的方式填充数组?
提前致谢
异步中可能存在延迟call.One处理它的方法是仅在异步完成后调用下一个连续步骤call.I在您的代码中添加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() 变为 return 空。但是当您的异步调用获取数据时,它将执行 callback_function() 这是您逻辑的下一步。
我是一个 javascript-noob,试图通过 geoserver 和 openlayers3 访问数据。这是我的代码:
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;
}
我现在的问题是,功能数组"fast" 填充得不够。如果我在 "return features;" 处设置断点(使用 firebug),数组将为空。如果我等待 2 秒并将鼠标悬停在变量 "features" 上,则数组将填充预期的元素。 所以我的问题是: 我认为这可能是由于异步请求导致的问题。 我怎样才能 return 以正确的方式填充数组?
提前致谢
异步中可能存在延迟call.One处理它的方法是仅在异步完成后调用下一个连续步骤call.I在您的代码中添加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() 变为 return 空。但是当您的异步调用获取数据时,它将执行 callback_function() 这是您逻辑的下一步。