【发布时间】:2015-03-07 22:00:01
【问题描述】:
在我的 nodejs 应用程序(使用sailsjs)中,我使用控制器接收以.zip 格式上传的多个图像,然后使用水线将它们保存在我的数据库中:
var images = [];
zipEntries.forEach(function(zipEntry) {
zip.extractEntryTo(zipEntry.entryName, p, false, true);
Image.create({
filename: zipEntry.name,
}).exec(function(err, image){
images.push(image);
});
});
res.json(images);
问题是我需要发回所有生成的图像 ID(自动递增),但创建方法是异步的。
有什么方法可以等待所有创建方法结束,然后才能发送服务器响应?
编辑:所以我通过检查获得的图像数量并在 .exec 方法中增加索引来找到解决方法,我可以检查这是否是最后一个 exec 然后发送响应。
var images = [],
nbValidImage = 0,
i = 0;
zipEntries.forEach(function(zipEntry) {
zip.extractEntryTo(zipEntry.entryName, p, false, true);
nbValidImage++;
Image.create({
filename: zipEntry.name,
}).exec(function(err, image){
i++;
images.push(image);
if(i == nbValidImage) {
res.json(images);
}
});
});
但如果有人有更好的解决方案... :)
【问题讨论】:
标签: javascript node.js asynchronous sails.js waterline