2016-06-09 166 views
0

对于我的项目,我用express.js和redis.io作为数据库使用Node.js。现在我有一个查询参数获取资源。它应该给我持有特定书籍的图书馆的ID。但我不明白我的程序的处理顺序。正如你在下面的代码中看到的,我将库数组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

有人能解释一下吗?为什么我的数组在第二点和第三点是空的?

回答

2

你的回调是异步执行的。第二是日志是第一个,因为它在第三个之前在同步块中。 1st显示最后一个,因为它是在你从数据库中得到结果后调用的,这是异步发生的,所以在第二和第三部分代码之后。