• Uncaught (in promise) TypeError: Cannot read property 'length' of undefined


    1、错误描述

    Uncaught (in promise) TypeError: Cannot read property 'length' of undefined
        geoJSONLoader.js:106
    at getBoundingRect (geoJSONLoader.js:106)
    at Object.load (geoJSONLoader.js:98)
    at geoSourceManager.js:73
    at Array.forEach (<anonymous>)
    at each (util.js:298)
    at Object.load (geoSourceManager.js:72)
    at Object.getFilledRegions (geoCreator.js:221)
    at ExtendedClass._createSelectableList (MapSeries.js:101)
    at ExtendedClass.init (MapSeries.js:78)
    at ExtendedClass.<anonymous> (Global.js:238)

    2、错误原因

    
    /*
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements.  See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership.  The ASF licenses this file
    * to you under the Apache License, Version 2.0 (the
    * "License"); you may not use this file except in compliance
    * with the License.  You may obtain a copy of the License at
    *
    *   http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.
    */
    
    var _util = require("zrender/lib/core/util");
    
    var each = _util.each;
    
    var parseGeoJson = require("./parseGeoJson");
    
    var _model = require("../../util/model");
    
    var makeInner = _model.makeInner;
    
    var fixNanhai = require("./fix/nanhai");
    
    var fixTextCoord = require("./fix/textCoord");
    
    var fixGeoCoord = require("./fix/geoCoord");
    
    var fixDiaoyuIsland = require("./fix/diaoyuIsland");
    
    /*
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements.  See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership.  The ASF licenses this file
    * to you under the Apache License, Version 2.0 (the
    * "License"); you may not use this file except in compliance
    * with the License.  You may obtain a copy of the License at
    *
    *   http://www.apache.org/licenses/LICENSE-2.0
    *
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.
    */
    // Built-in GEO fixer.
    var inner = makeInner();
    var _default = {
      /**
       * @param {string} mapName
       * @param {Object} mapRecord {specialAreas, geoJSON}
       * @return {Object} {regions, boundingRect}
       */
      load: function (mapName, mapRecord) {
        var parsed = inner(mapRecord).parsed;
    
        if (parsed) {
          return parsed;
        }
    
        var specialAreas = mapRecord.specialAreas || {};
        var geoJSON = mapRecord.geoJSON;
        var regions; // https://jsperf.com/try-catch-performance-overhead
    
        try {
          regions = geoJSON ? parseGeoJson(geoJSON) : [];
        } catch (e) {
          throw new Error('Invalid geoJson format
    ' + e.message);
        }
    
        each(regions, function (region) {
          var regionName = region.name;
          fixTextCoord(mapName, region);
          fixGeoCoord(mapName, region);
          fixDiaoyuIsland(mapName, region); // Some area like Alaska in USA map needs to be tansformed
          // to look better
    
          var specialArea = specialAreas[regionName];
    
          if (specialArea) {
            region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height);
          }
        });
        fixNanhai(mapName, regions);
        return inner(mapRecord).parsed = {
          regions: regions,
          boundingRect: getBoundingRect(regions)
        };
      }
    };
    
    function getBoundingRect(regions) {
      var rect;
    
      for (var i = 0; i < regions.length; i++) {
        var regionRect = regions[i].getBoundingRect();
        rect = rect || regionRect.clone();
        rect.union(regionRect);
      }
    
      return rect;
    }
    
    module.exports = _default;

       这个JavaScript文件中的函数报错,由于regions为空,调用length出现报错

    function getBoundingRect(regions) {
      var rect;
    
      for (var i = 0; i < regions.length; i++) {
        var regionRect = regions[i].getBoundingRect();
        rect = rect || regionRect.clone();
        rect.union(regionRect);
      }
    
      return rect;
    }

    3、解决办法

          由于使用echarts中的地图,数据取自json文件,检查数据格式是否正确

  • 相关阅读:
    牛客练习赛24 E:青蛙(最短路)
    菜根谭#10
    菜根谭#9
    菜根谭#8
    菜根谭#7
    菜根谭#6
    菜根谭#5
    菜根谭#4
    菜根谭#3
    菜根谭#2
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313754.html
Copyright © 2020-2023  润新知