Node.js | Express.js | Redis.io - 处理订单

时间:2016-06-09 11:36:26

标签: javascript node.js express redis

对于我的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?

1 个答案:

答案 0 :(得分:2)

您的回调是异步执行的。第二个是log是第一个,因为它在第三个之前处于同步块中。 1st显示最后一个,因为它是在从数据库获得结果后调用的,它是异步发生的,因此在第2和第3部分代码之后。