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 に答える