gpt4 book ai didi

javascript - NodeJS/Waterline,需要等待多次创建结束才能响应

转载 作者:行者123 更新时间:2023-11-30 10:08:27 26 4
gpt4 key购买 nike

在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com