В этом весь смысл асинхронного программирования с обратными вызовами. Функция async вместо возвращения результата принимает обратный вызов, который будет запускаться сразу после выполнения задания. Обратный вызов получит результат async-работы в качестве аргумента.
Не ожидайте, что функции async вернут что-либо. Вместо этого вложите логику обработки результатов в обратный вызов, который вы передаете этой функции.
Таким образом, ваш отрезала должен выглядеть примерно так:
restapi.get('/data', function(req, res){
var array = [];
db.each("SELECT value FROM counts", function(err, row) {
if (row) {
array.push(row);
}
else {
res.json(array); // When there are no more rows
}
});
});
Работа с плоскими обратных вызовов является довольно боль. Это бесконечное гнездование, как правило, сильно загромождает ваш код. Вы можете помочь себе, если вы назвали свои обратные вызовы, и используйте именованные версии вместо вложенности. Это достанется вам до сих пор. Лучшим решением является использование библиотеки потока управления, например async. Однако для того, чтобы это работать, все обратные вызовы должны быть составными, т. Е. Следовать соглашению о принятии объекта ошибки в качестве первого аргумента. См. Например, this explaination.
Спасибо за ответ и разъяснение, могли бы показать мне пример, чтобы лучше понять? – user2726677
Просто подтвердил ответ. Добавим еще один полезный бит. –
Очень спасибо, Иван! – user2726677