OpenLayers3没有停止挂起的磁贴请求

时间:2016-06-30 09:14:05

标签: javascript ajax gis openlayers-3

我正在使用OL3 ol.layer.Tileol.source.XYZ来加载特定磁贴服务器的磁贴。

平移和缩放地图我注意到旧的待处理磁贴请求(例如,用于加载先前缩放级别的请求)不会自动中止,它们会一直运行直到得到响应。 Leaflet不会发生这种情况。

这是一个错误吗?我应该怎样做才能让OL3

中止待处理的平铺请求

1 个答案:

答案 0 :(得分:1)

我也对答案感兴趣。

与此同时,只有ol3一个解决方案是通过加载函数手动处理切片(我喜欢使用promises,但很容易在没有一个的情况下重写下面的内容),设置超时,然后继续。下面的代码有点过头,仅用于超时的目的,但如果想要在地图上显示之前操作切片,则有用。

tileLoadFunction: offline.get_tile_function(layername),

function get_tile_function(layername) {
return function my_tileLoadFunction(it, s) {
    var ie = new Image();
    var clock;

    var p = new Promise (function (win, fail) {
        ie = it.getImage();

        clock = setTimeout(function() {
            return fail(Error('skipping tile, source for '+layername+' +
            +took too long to provide img data'));
        }, 3000); 

        getRemote();

        //all one has to do is win(s) the source (s)
        //but instead, get the image and do something with it...
        function getRemote() {
            //... like calling a canvas context pixel manipulation subroutine
            pixelManipulate(s).then(function(newpixeldata) {
                return win({image or image data})
            }, function (err) {
                return fail(Error('problem playing w/pixels'))
            })
        }
    })


    p.then(function(data) {
        if (clock) clearTimeout(clock)
        ie.src = data;
        ie = null;
    }, function(error) {
        if (error) console.log(error)
        ie.src = '';
        ie = null;
    });
}
})