Это пусто, потому что вызов вашей функции «запрос» асинхронный .Функция, которую вы передаете в нее, не будет запущена, пока не станут доступны результаты.Следовательно, ваша функция «myfunc» возвращается немедленно, задолго до вызова этой функции обратного вызова.
Используя Javascript в браузере, вы должны подумать об этом.Вместо того чтобы ожидать, что ваши «имена» будут готовы немедленно, измените «myfunc» так, чтобы вы передавали it функцию обратного вызова, которая будет вызываться, когда имена действительно доступны:
var myfunc = function(client, id, whenFinished) {
var names = new Array();
client.query(
'SELECT stuff FROM mytable WHERE id="'+id+'"',
(function selectCb(err, results, fields) {
if (err) {
throw err;
}
for (result in results) {
// This prints fine
console.log(results[result].name);
names[result] = results[result].name;
}
client.end();
if (whenFinished) whenFinished(names); // callback
})
);
};
Nowкогда вы вызываете свою функцию, вместо того, чтобы ожидать «имена» в качестве возвращаемого значения, вы передаете другую функцию, которая будет действовать в списке имен:
myfunc(1, 2, function(names) { console.log(names); });