我有以下功能:
//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');
问题是该函数没有返回任何内容!
答案 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; });