如何在L.tileLayer上设置超时到tileerror?

时间:2017-10-05 11:47:32

标签: javascript jquery leaflet mapbox

我从WMS服务获取图层,但有时会发生与服务器的连接超时。在这些情况下,应用程序会挂起很长时间等待NET_ERR,但超时时间太长。

我正在使用“tileerror”来捕捉错误:

myLayer.on('tileerror', function(error, tile) {
    console.log(error);
    console.log(tile);
    switchToBackupServer();
    });

如何缩短默认超时并采取纠正措施?

1 个答案:

答案 0 :(得分:2)

  

如何缩短默认超时并采取纠正措施?

你不能。它是特定于浏览器的,并且没有API。

但是,您可以创建自己的L.TileLayer子类并添加一些额外的逻辑。请参阅L.TileLayer.prototype.createTile的默认实现中的这些行:

    DomEvent.on(tile, 'load', Util.bind(this._tileOnLoad, this, done, tile));
    DomEvent.on(tile, 'error', Util.bind(this._tileOnError, this, done, tile));

您可以使用以下内容触发更短的超时:

    var loadCallback = Util.bind(this._tileOnLoad, this, done, tile);
    var errorCallback = Util.bind(this._tileOnError, this, done, tile);

    DomEvent.on(tile, 'load', loadCallback);
    DomEvent.on(tile, 'error', errorCallback);

    setTimeout(function(){
        // Do nothing if the tile has already been loaded successfully
        if (tile.loaded) return;

        // Prevent any further events from triggering
        DomEvent.off(tile, 'load', loadCallback);
        DomEvent.off(tile, 'error', errorCallback);

        // Trigger the error
        errorCallback();
    });

可能有一些我现在无法预见的竞争条件,但这是一般的想法。