Express:在调用某个函数之前如何等待函数完成
Express: How to wait for a function to complete before calling something
我在快递有一个问题。下面的代码找到pokemon集合中的所有值,并逐个检查另一个集合以找到匹配。然而,在所有条目插入完成之前,代码到达res.send(documents)
(display.insert(docs)
)。我知道这是因为节点异步工作的方式,但我找不到解决这个问题的方法。我如何确保所有的文档都被插入?
pokeRouter.get('/sightings/:type([a-z]+)', function(req, res) {
display.deleteMany({}, function(err, bool) {
if (err) throw err;
if (bool) {
pokemon.find().each(function(err, item) {
if (err) throw err;
if (item == null) {
display.find().toArray(function(err, documents) {
if (err) throw err;
res.send(documents);
})
} else if ((req.params.type == item.type1) || (req.params.type == item.type2)) {
sightings.find({
pokedex_id: item._id
}).toArray(function(err, docs) {
if (docs == null) {
return null;
} else {
display.insert(docs);
}
});
}
});
}
});
});
您的display.insert(...)
函数可能也是异步的。因此,find().each(...)
内部的函数在插入完成之前返回。
我强烈建议将你的回调转换为承诺,或者使用async模块来处理你的异步内容
不使用Promises或async模块,你可以重构你的代码有文档变量外的异步代码和积累所有可插入的项目,在你的异步代码你会有某种类型的检查(如果一切都插入),然后我将调用res.send(documents)
相关文章:
- 在C#函数之前等待弹出响应
- 如何在恢复函数之前等待 JavaScript 承诺解析
- 如何延迟jQuery函数以等待内容淡出
- 如何在Javascript中阻止函数并等待其他任务完成
- 在执行函数之前等待多个 iFrame 加载
- 如何在多 Jquery Get 函数中等待
- 如何在 ajax 中调用函数到 php 函数并等待响应
- 什么'这是让函数返回等待异步操作完成的最佳方法
- nodemariasql查询获胜't terminate/是否执行mariadb.end()函数以等待所有查询
- 函数中的 js 函数并等待返回值
- 寻找一个JS插件或jQuery函数,等待用户暂停输入文本字段,然后进行回调
- 如何重复调用一个函数并等待下一次调用之前完成
- 调用函数并等待结果
- 如何在异步函数中等待请求方法
- 在执行另一个函数之前等待一个函数完成
- Jquery函数不等待Javascript函数的结果为什么?
- 如何在执行函数之前等待iframe加载?
- 在可以再次调用javascript函数之前等待
- 在离开函数之前等待动画完成
- 如何在执行另一个函数之前等待某个函数完成?