我尝试使用async.waterfall来清理我的代码。我有两个问题,这是我的代码。
async.forEachOf(req.files, (value, key, callback) => {
imagesController.create(req, res, idCreation, req.files[key].filename, imageData[key].ext)
})
async.waterfall([
function(callback) {
exhibitionController.create(req,res, idCreation, req.body.exhibitionName, req.body.galery, req.body.exhibitionBegin, req.body.exhibitionEnds)
},
function(exhibition, callback) {
creationsController.findThisCreation(req, res, idCreation)
}],
function(err, creation) {
if(!err){
res.send(creation)
}
})
使用此代码,一切都在我的数据库中设置,数据被保存, 但是瀑布末端的res.send(数据)不起作用。相反,我的页面仍在加载表单。
另一个问题是优化代码:我试图在瀑布函数中插入forEach,但除了我的图像之外,所有数据都被保存。
我也尝试在forEach函数的内部渲染,实际上我做了所有这些东西等待图像。但问题几乎相同,页面无法呈现。
答案 0 :(得分:0)
我终于解决了它,但它不是小菜一碟...... 我必须承认,我并不完全满意,我只能访问图像和展览结果,因为我在创建它们时将它们推入标签中。 我希望瀑布允许等待在瀑布尽头创造之前,这种形象让自己成为...... 这很奇怪,因为当我通过项目列表页面访问数据时,我的标签会与里面的所有数据联系起来。它是同一个吸气剂。 我必须更多地努力寻找一个真正好的解决方案。
这是我的瀑布:
async.waterfall([
function(callback) {
callback(null, creationsController.create(req, res, true))
},
function(creation, callback) {
creation.then(function(crea){
idCreation = crea.get('id');
callback(null, exhibitionController.create(req,res, idCreation, req.body.exhibitionName, req.body.galery, req.body.exhibitionBegin, req.body.exhibitionEnds))
})
},
function(exhibition, callback){
exhibition.then(function(exhi){
exhibitions = exhi;
callback(null, async.forEachOf(req.files, (value, key, callback) => {
images.push(value);
callback(null,
imagesController
.create(req, res, idCreation, req.files[key].filename, imageData[key].ext));
}))
})
},
function(images, callback) {
callback(null, creationsController.findThisCreation(req, res, idCreation))
}], function(err, creation) {
if(!err){
creation.then(function(result){
result.Images.push.apply(result.Images, images);
result.Exhibition.push.apply(result.Exhibition, exhibitions);
res.send(result);
})
}else{
res.send(err)
}
})