2016-06-09 154 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顯示最後一個,因爲它是在你從數據庫中得到結果後調用的,這是異步發生的,所以在第二和第三部分代碼之後。