在我的 nodejs 应用程序(使用 sailsjs)中,我使用 Controller 接收以 .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 方法中递增索引找到了解决方法,我可以检查这是否是最后一个执行程序,然后发送响应。
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);
}
});
});
但是如果有人有更好的解决方案... :)
最佳答案
在这种情况下,我会选择 async.each ,因为 zipEntries
是一个集合(没有测试这段代码):
var async = require('async');
async.each(zipEntries, function (zipEntry, callback) {
zip.extractEntryTo(zipEntry.entryName, p, false, true);
Image.create({
filename: zipEntry.name
}).exec(function (err, image) {
images.push(image);
callback();
});
}, function (err) {
if (error) throw new Error(error);
res.json(images);
});
关于javascript - NodeJS/Waterline,需要等待多次创建结束才能响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862979/