0

我有以下功能:

//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');

问题是该函数不返回任何东西!

4

1 回答 1

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; });
于 2013-02-07T18:11:26.250 回答