2014-01-20 3 views
3

Я пытаюсь использовать sqlite3 в приложении expressjs (nodejs)Как вернуть результаты sqlite3 узла в функцию?

Я хочу создать функцию, которая возвращает все результаты из оператора select. Эта функция будет вызываться маршрутом, который

var queryGetAll = 'SELECT id, title, description, modified, lat, lng, zoom FROM maps'; 
function Manager(){ 
     this.db = null; 
     this.getAll = function(){ 
      var all = []; 
      this.db.all(queryGetAll, function(err, rows){ 
       if (err){ 
        throw err; 
       } 
       all.push.apply(all, rows); 
      }); 
      return all; 
     } 
} 

Я знаю nodejs является асинхронным, так что это означает возвращение называется до конца запроса. Но я не могу найти примеры того, как я должен использовать sqlite.

+1

Это может _seem_ разные, но это на самом деле так же, как [как АЯКС вопрос] (http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-a-ajax-call/16825593 # 16825593) - вы не возвращаетесь из асинхронного запроса - вместо этого вы передаете обратный вызов или используете обещания. –

ответ

6

Строка «вернуть все» в вашем примере будет выполнена ПЕРЕД вызовом обратного вызова this.db.all(). Для того, чтобы ваш код для работы вам нужно сделать что-то вроде этого:

var queryGetAll = 'SELECT id, title, description, modified, lat, lng, zoom FROM maps'; 
function Manager(){ 
     this.db = null; 
     // Allow a callback function to be passed to getAll 
     this.getAll = function(callback){ 
      this.db.all(queryGetAll, function(err, rows){ 
       if (err){ 
        // call your callback with the error 
        callback(err); 
        return; 
       } 
       // call your callback with the data 
       callback(null, rows); 
       return; 
      }); 
     } 
} 
+2

Спасибо. Теперь я знаю, что мне нужно подумать о возврате и возврате результатов. Я читаю http://callbackhell.com/ – toutpt

+0

Как только вы привыкнете к концепции обратных вызовов, код начинает приобретать больше смысла, а вид становится естественным. Это правда, что он может легко превратиться в обратный ад (или пирамиду гибели), так же как и на других языках, что люди могут переоценивать свои творчества OO с 17 классами и 6 фабриками, чтобы добавить два номера :) –

+0

Итак, где результат получается? –

Смежные вопросы