2016-06-09 2 views
0

Для моего проекта я использую Node.js с express.js и redis.io как базу данных. Теперь у меня есть ресурс get с параметром запроса. Он должен дать мне идентификаторы библиотек, которые содержат определенную книгу. Но я не понимаю порядок обработки моей программы. Как вы можете видеть в приведенном ниже коде, я печатаю библиотеки Array 3 раза на консоль.Node.js | Express.js | Redis.io - Порядок обработки

var express = require('express'); 
var bodyParser = require('body-parser'); 
var redis = require('redis'); 

var db = redis.createClient(); 
var jsonParser = bodyParser.json(); 
var app = express(); 
app.use(jsonParser); 

app.get('/test', function (req, res) { 

    if (req.query.book != null) { 

     var book_id = req.query.book; 
     var libraries = []; 

     db.get('book:' + book_id, function (err, rep) { 

      var book = JSON.parse(rep); 
      var libs = book.libraries; 

      libs.forEach(function (val) { 

       libraries.push(val.id); 

      }); 
      console.log("1.: " + libraries); 
     }); 
     console.log("2.: " + libraries); 
    } 
    console.log("3.: " + libraries); 
}); 
app.listen(1337); 

И это результат в моей консоли:

2 .:

3 .:

1 .: 1,4

Может кто-то объяснить? И почему мой массив является emtpy в точках 2 и 3?

ответ

2

Ваши обратные вызовы выполняются асинхронно. Второй - это журнал, потому что он находится в синхронном блоке до третьего. Первый отображается последним, потому что он вызывается после того, как вы получаете результат из базы данных, который происходит асинхронно, поэтому после 2-й и 3-й частей кода.

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