Error: There is no source with this ID in mapbox-gl-js

Error: There is no source with this ID in mapbox-gl-js

我想从地图中删除源和图层。每当我想删除源和 layerrs 表单地图时,我都会使用 removeSourceAndLayers() 函数。

const removeSourceAndLayers=(map)=>{
        for(var i=0;i<dataSet.length;i++){
            try{
                // source or layer might not pesent
                // which we are trying to remove
                if(map.getLayer(`empty-source-${i}`))
                    map.removeLayer(`empty-source-${i}`);
                if(map.getLayer(`complete-source-${i}`))
                    map.removeLayer(`complete-source-${i}`);
                if(map.getSource(`empty-source-${i}`))
                    map.removeSource(`empty-source-${i}`);
                if(map.getSource(`complete-source-${i}`));
                    map.removeSource(`complete-source-${i}`);
            }catch(e){
                console.log(e);
            }
        }
    }

我遇到了这个错误。

DynamicRoute.jsx:39 Error: There is no source with this ID
    at i.removeSource (mapbox-gl.js:35)
    at r.removeSource (mapbox-gl.js:35)
    at removeSourceAndLayers (DynamicRoute.jsx:37)
    at clean (DynamicRoute.jsx:93)
    at commitHookEffectListUnmount (react-dom.development.js:19710)
    at commitPassiveHookEffects (react-dom.development.js:19768)

我正在检查源和层是否与当前 ID 一起出现然后删除 continue.But,仍然出现错误。

jsx:39 行是 console.log(e);.

你最后一个 if 语句有一个 ;最后,如果你删除它,它就会起作用。

if(map.getSource(`complete-source-${i}`)); // <---
    map.removeSource(`complete-source-${i}`);

您的代码现在的编写方式与下面的代码具有相同的结果,map.removeSource() 始终被调用:

if(map.getSource(`complete-source-${i}`)) {
}

map.removeSource(`complete-source-${i}`);