节点js闭包需要推送到阵列

时间:2017-10-02 14:21:35

标签: javascript node.js closures

我有一个问题,我的代码不会返回已被推送数据的数组,我昨晚发现它是关于闭包的东西,我研究过它们并且我没有真正得到它们。所有示例都使用addeventlistener。 我知道我必须等到推动完成,因为这是异步的。

app.post("/search", function(req, res){
    var test = []
    for (var key in req.body.movie){
        Movie.find({title: "Gotham"}, function(err, foundMovie){
            test.push(foundMovie)
        })
    }
    console.log(test)
    res.render("index")
});

2 个答案:

答案 0 :(得分:0)

MongoDB / Mongoose操作是异步的。对您的问题可能的解决方法是使用extern "C" { __declspec(dllexport) void ProcessData(unsigned char* data, int size) { //sizeof(data) is always 8 } } 之类的。

async/await

您需要使用较新版本的Node for async / await才能工作。 :)

也永远不要在循环中执行数据库查询。

答案 1 :(得分:0)

了解如何使用promises http://frontend.turing.io/lessons/module-3/promises.html是一个很好的资源。基本上js将为数据创建一个占位符,直到它到达那里并且你可以将promises链接在一起。