2015-04-01 88 views
1

下面的代码需要一个文件的内容,替换一些字符,并输出结果:_iteratorError未定义不是函数

的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>$1</h2>'], 
    [/^# (.*)/gm,  '<h1>$1</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)) 
}) 

我得到这个错误:

[email protected]:~/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; 
} 

回答

1

添加

require ('babel/polyfill'); 

对于某些功能,巴贝尔使用小支持库。欲了解更多信息,请参阅https://babeljs.io/docs/usage/polyfill/http://babeljs.io/docs/usage/runtime/

希望帮助!

编辑:

所以我注意到,其实transformHeadings没有传递正确的参数。 text应该是一个字符串,而不是一个数组。你需要一次迭代data一行,而不是传入整个数组。

你得到这个错误的原因是因为一个数组没有replace方法,所以引发了一个异常。我不清楚为什么巴贝尔没有适当地重新提出这里的错误,但这肯定会增加混淆。

+0

感谢您的帮助,但我仍然遇到同样的问题。请看我的答案。我更新了它并添加了编译的ES5代码。 – alexchenco 2015-04-01 05:26:05

+0

我已经更新了答案; tl; dr:massReplace和transformHeadings期待一个字符串,而不是一个数组。 – 2015-04-01 05:44:14

+0

哦,你是对的谢谢。 – alexchenco 2015-04-01 05:51:49

相关问题