javascript - Node js 闭包需要推送到数组

标签 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")
});

最佳答案

MongoDB/Mongoose 操作是异步的。解决您的问题的一个可能方法是像这样使用 async/await

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

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

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

关于javascript - Node js 闭包需要推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527430/

相关文章:

node.js - Azure IOT 集线器设备 "Suspension"

javascript - Node.js Socket.io、socket.emit 不起作用

rust - 闭包中的可变性问题

c# - "access to disposed closure"在这里是什么意思?

javascript - 像 Javascript "round()"这样的 "Math.round()"的 Pythonic 方式?

Javascript按键拆分JSON对象

javascript - splinter 的 Foursquare 像动画源一样

javascript - 使用聚合查询时出现错误, 'The field name ' $acknowledged'不能是运算符(operator)名称'

node.js - 如何修复 macOS 上的 node.js 写入文件权限被拒绝错误?

ios - 如何从 iOS/swift 中的闭包函数返回值?