node-csv-parser将值返回给变量

时间:2013-02-07 17:48:36

标签: node.js csv

我有以下功能:

//translate strings
function translate(lng, str)
{
    var translation = '';
    csv().from(__dirname + '/../application/_common/lng/' + lng + '.csv', {delimiter: ';'})
    .transform( function(row, index) {
        if(row[0] == str) {
            return row[1];
        }
    })
    .on('data', function(data) {
        translation = data;
    })
    .on('end', function() { return translation; });
}

我希望将csv中找到的值变为这样的变量:

var translation = translate('en','translate_me');

问题是该函数没有返回任何内容!

1 个答案:

答案 0 :(得分:0)

好吧,你不返回任何东西,你只返回内部函数中的东西,但外部函数却没有。如果CSV是同步的,请执行以下操作:

function translate(lng, str)
{
    var translation = '';
    csv().from(__dirname + '/../application/_common/lng/' + lng + '.csv', {delimiter: ';'})
    .transform( function(row, index) {
        if(row[0] == str) {
            return row[1];
        }
    })
    .on('data', function(data) {
        translation = data;
    })
    .on('end', function() { return translation; });  // This just returns something from the inner function, which has no effect.
    return translation; // actually return the translation
}

如果CSV是_asynchronous,它会变得有点困难。这样做:

function translate(lng, str, callback) // Note the extra parameter
{
    var translation = '';
    csv().from(__dirname + '/../application/_common/lng/' + lng + '.csv', {delimiter: ';'})
    .transform( function(row, index) {
        if(row[0] == str) {
            return row[1];
        }
    })
    .on('data', function(data) {
        translation = data;
    })
    .on('end', function() { callback(translation); }); // call the callback
}

现在你可以这样称呼它:

var translation;
translate('en', 'translate_me', function(val){ translation = val; });