对于我的projekt我使用带有express.js和redis.io的Node.js作为数据库。现在我有一个带查询参数的get资源。它应该给我持有特定书籍的图书馆的ID。但我不明白我的程序的处理顺序。正如您在下面的代码中看到的,我将库数组3次打印到控制台。
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点和第3点是emtpy?
答案 0 :(得分:2)
您的回调是异步执行的。第二个是log是第一个,因为它在第三个之前处于同步块中。 1st显示最后一个,因为它是在从数据库获得结果后调用的,它是异步发生的,因此在第2和第3部分代码之后。