【发布时间】:2014-12-01 17:21:16
【问题描述】:
我正在尝试遍历对象并调用一个异步方法(“搜索”),该方法具有回调,当所有对象都完成后,将结果对象(resultSet)写入 json 文件;但现在的问题是,因为我的搜索功能是异步 writefile 不等待它们完成然后将结果集写入 json 文件,所以它将空对象写入 json 文件;还值得一提的是我不想使用承诺;除了承诺之外,您能否让我知道解决这个问题的最佳方法是什么?
router.post('/export', function (req, res) {
Object.keys(models).forEach(function (name) {
resultSet[name] = [];
search(param1, name, function (err, data) {
if (err) {
console.error(req.host, req.path, err, err.stack);
res.json(400, err);
} else {
resultSet[name] = data;
}
});
});
var file = "myFile.json";
jf.writeFile(file,resultSet,function(err){
console.log(err);
});
});
【问题讨论】:
-
能不能把搜索功能改成把整组数据都拿进来,在搜索功能里面做循环?然后给它一个回调,函数完成后写入resultSet。
-
不,它在许多其他地方都使用过!
-
Promise 确实是最好的解决方案。为什么不想使用这种方法?
-
您可以创建一个计数器并在计数器显示时触发 writeFile..
-
您是否尝试过使用async 库来更好地管理此扇出?
async.map作为异步forEach等效项做得很好。
标签: javascript node.js asynchronous express