_iteratorError undefined 不是函数
_iteratorError undefined is not a function
以下代码获取一个文件的内容,替换一些字符,并输出结果:
test.txt:
# Title
## Title 2
Paragraph
index.js:
#!/usr/bin/env node
require('babel/polyfill')
'use strict'
var fs = require('fs')
, filename = process.argv[2]
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME')
process.exit(1)
}
function massReplace(text, replacementArray) {
let results = text
for (let [regex, replacement] of replacementArray) {
results = results.replace(regex, replacement)
}
return results
}
function transformHeadings(text, orig) {
return massReplace(text,
[/^## (.*)/gm, '<h2></h2>'],
[/^# (.*)/gm, '<h1></h1>'] ]
)
}
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err
data = data.split(/\n\n/gm)
var tree = data.slice()
console.log(transformHeadings(data, tree))
})
我收到这个错误:
alex@alex-K43U:~/node/m2n$ babel-node index4.js test.txt
/home/alex/node/m2n/index4.js:41
throw _iteratorError;
^
TypeError: undefined is not a function
at massReplace (/home/alex/node/m2n/index4.js:17:4)
at transformHeadings (/home/alex/node/m2n/index4.js:30:2)
at /home/alex/node/m2n/index4.js:39:3
at fs.js:336:14
at FSReqWrap.oncomplete (fs.js:99:15)
不知道问题出在哪里,也不知道 throw _iteratorError
是什么意思。
我正在使用 Babel 来解析 ES6 代码。
可能是什么问题?
编辑:
这是编译后的函数。但是还是看不出问题:
function massReplace(text, replacementArray) {
var results = text;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = replacementArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _step$value = _slicedToArray(_step.value, 2);
var regex = _step$value[0];
var replacement = _step$value[1];
results = results.replace(regex, replacement);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator["return"]) {
_iterator["return"]();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return results;
}
添加
require ('babel/polyfill');
对于某些功能,Babel 使用了一个小型支持库。有关详细信息,请参阅 https://babeljs.io/docs/usage/polyfill/ and http://babeljs.io/docs/usage/runtime/
希望对您有所帮助!
编辑:
所以我注意到实际上 transformHeadings
没有传递正确的参数。 text
应该是一个字符串,而不是一个数组。您需要一次遍历 data
一行,而不是传入整个数组。
您收到此错误的原因是数组没有 replace
方法,因此会引发异常。不过,我不清楚为什么 Babel 没有正确地重新提出错误,这无疑增加了混乱。
以下代码获取一个文件的内容,替换一些字符,并输出结果:
test.txt:
# Title
## Title 2
Paragraph
index.js:
#!/usr/bin/env node
require('babel/polyfill')
'use strict'
var fs = require('fs')
, filename = process.argv[2]
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME')
process.exit(1)
}
function massReplace(text, replacementArray) {
let results = text
for (let [regex, replacement] of replacementArray) {
results = results.replace(regex, replacement)
}
return results
}
function transformHeadings(text, orig) {
return massReplace(text,
[/^## (.*)/gm, '<h2></h2>'],
[/^# (.*)/gm, '<h1></h1>'] ]
)
}
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err
data = data.split(/\n\n/gm)
var tree = data.slice()
console.log(transformHeadings(data, tree))
})
我收到这个错误:
alex@alex-K43U:~/node/m2n$ babel-node index4.js test.txt
/home/alex/node/m2n/index4.js:41
throw _iteratorError;
^
TypeError: undefined is not a function
at massReplace (/home/alex/node/m2n/index4.js:17:4)
at transformHeadings (/home/alex/node/m2n/index4.js:30:2)
at /home/alex/node/m2n/index4.js:39:3
at fs.js:336:14
at FSReqWrap.oncomplete (fs.js:99:15)
不知道问题出在哪里,也不知道 throw _iteratorError
是什么意思。
我正在使用 Babel 来解析 ES6 代码。
可能是什么问题?
编辑:
这是编译后的函数。但是还是看不出问题:
function massReplace(text, replacementArray) {
var results = text;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = replacementArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _step$value = _slicedToArray(_step.value, 2);
var regex = _step$value[0];
var replacement = _step$value[1];
results = results.replace(regex, replacement);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator["return"]) {
_iterator["return"]();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return results;
}
添加
require ('babel/polyfill');
对于某些功能,Babel 使用了一个小型支持库。有关详细信息,请参阅 https://babeljs.io/docs/usage/polyfill/ and http://babeljs.io/docs/usage/runtime/
希望对您有所帮助!
编辑:
所以我注意到实际上 transformHeadings
没有传递正确的参数。 text
应该是一个字符串,而不是一个数组。您需要一次遍历 data
一行,而不是传入整个数组。
您收到此错误的原因是数组没有 replace
方法,因此会引发异常。不过,我不清楚为什么 Babel 没有正确地重新提出错误,这无疑增加了混乱。