Internet Explorer中的Symbol.iterator不起作用

时间:2018-02-13 18:11:05

标签: javascript angularjs for-loop iterator internet-explorer-11

在AngularJS网络应用程序中,我有这个JS代码块:

var _loop = function _loop(file) {
  // For each file a reader (to read the base64 URL)
  // and a promise (to track and merge results and errors)
  var promise = new Promise(function (resolve, reject) {
    var reader = new FileReader();
    reader.addEventListener('load', function (event) {
      var type = void 0;
      var name = file.name;

      // Try to find the MIME type of the file.
      var match = mimeTypeMatcher.exec(file.type);
      if (match) {
        type = match[1]; // The first part in the MIME, "image" in image/png
      } else {
        type = file.type;
      }

      // If it's an image, try to find its size
      if (type === 'image') {
        var data = {
          src: reader.result,
          name: name,
          type: type,
          height: 0,
          width: 0
        };

        var image = new Image();
        image.addEventListener('error', function (error) {
          reject(error);
        });
        image.addEventListener('load', function () {
          data.height = image.height;
          data.width = image.width;
          resolve(data);
        });
        image.src = data.src;
      } else if (type) {
        // Not an image, but has a type
        resolve({
          src: reader.result,
          name: name,
          type: type
        });
      } else {
        // No type found, resolve with the URL only
        resolve(reader.result);
      }
    });
    reader.addEventListener('error', function (error) {
      reject(error);
    });
    reader.addEventListener('abort', function (error) {
      reject('Aborted');
    });

    reader.readAsDataURL(file);
  });

  promises.push(promise);
};

var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
  for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
    var file = _step.value;

    _loop(file);
  }    } catch (err) {
  _didIteratorError = true;
  _iteratorError = err;
} finally {
  try {
    if (!_iteratorNormalCompletion && _iterator.return) {
      _iterator.return();
    }
  } finally {
    if (_didIteratorError) {
      throw _iteratorError;
    }
  }
}

并在最后一个块中的Internet Explorer 11中:

  for (var _iterator = files[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
    var file = _step.value;

    _loop(file);
  }

我收到此错误:

  

该对象不支持该属性或'jscomp_symbol_iterator0'方法

我读到IE不支持Symbol。所以,我试图将代码重写为:

for (var _iterator = files.length, _step; !(_iteratorNormalCompletion = (_step = _iterator[_iterator++]).done); _iteratorNormalCompletion = true) {
var file = _step.value;

_loop(file);

}

但我有这个错误:

  

无法读取未定义

的属性“已完成”

所以,我知道IE不支持它。但是,有另一种方法可以用另一种方式编写该循环,由IE支持吗?

1 个答案:

答案 0 :(得分:0)

在更改代码之前,如果一切都在Chrome中正常运行,并且您在项目中使用了编译功能,则可以考虑在入口点的顶部添加

import 'core-js'

目前core-js polyfill library是提供跨浏览器支持的最简单方法