Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js | Express.js | Redis.io-处理订单_Javascript_Node.js_Express_Redis - Fatal编程技术网

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

Javascript Node.js | Express.js | Redis.io-处理订单,javascript,node.js,express,redis,Javascript,Node.js,Express,Redis,对于我的项目,我使用Node.js和express.js以及redis.io作为数据库。现在我有了一个带有查询参数的get资源。它应该给我图书馆的ID,里面有一本书。但是我不明白我的程序的处理顺序。正如您在下面的代码中所看到的,我在控制台上打印了3次库数组 var express = require('express'); var bodyParser = require('body-parser'); var redis = require('redis'); var db = redis.

对于我的项目,我使用Node.js和express.js以及redis.io作为数据库。现在我有了一个带有查询参数的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个显示在最后,因为它是在从数据库获得结果后调用的,这是异步的,所以在代码的第2和第3部分之后。

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