2017-10-05 71 views
1

我正在從WMS服務獲取圖層,但有時會發生與服務器的連接超時。在這種情況下,應用程序掛起很長時間等待NET_ERR,但超時時間太長。如何在L.tileLayer上將超時設置爲tileerror?

我趕上了「tileerror」錯誤:

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

我怎樣才能縮短默認的超時時間,並採取糾正措施?

回答

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(); 
    }); 

有可能是我現在不能預見一些競爭條件,但是這就是大概的概念。

+0

對於讀者:如果你不單獨導入Leaflet類,而是整個UMD包,你應該使用'L.DomEvent','L.Util'等而不是'DomEvent','Util' – ghybs