在我的nodejs應用(使用sailsjs)中,我使用控制器接收以.zip上傳的多個圖像,然後使用水線將它們保存在我的數據庫中:NodeJS/Waterline,需要在響應前等待多個創建結束
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文檔,async.each似乎對我來說是最好的解決方案。謝謝:) – Najie
我同意每個會更好。如果您在運行此計算機的計算機上運行內存,則每個限制也很好,您可以限制並行創建的文件數量。 – jlonganecker