【发布时间】:2018-03-13 15:18:21
【问题描述】:
我有一个问题,我的代码不会返回已推送数据的数组,我昨晚发现这是关于闭包的问题,我研究了它们,但我并没有真正理解它们。所有示例都使用 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")
});
【问题讨论】:
-
数组
test将在console.log发生时为空,因为Movie.find还没有完成他们的工作(并将项目推入数组)。在所有Movie.find完成工作后,您必须使用该数组。 -
Movie.find() 可能是异步的。因此,您必须在回调
function(err, foundMovie)中包含返回结果的代码。 -
查看
async/await和Promise.all() -
作为对之前所有 cmets 的补充,您在循环中执行完全相同的
.find()查询 = 多次,效率不高。 -
@ibrahimmahrir 我知道我必须等待,我使用 setinterval 发现了这一点,但我将如何等待函数完成?我可以在 foundmovies 和 req.body.movies 之间添加一个长度检查,然后调用 log 函数,但除此之外我不知道
标签: javascript node.js closures