async.waterfall最后没有呈现

时间:2018-05-01 11:39:27

标签: javascript asynchronous sequelize.js waterfall

我尝试使用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函数的内部渲染,实际上我做了所有这些东西等待图像。但问题几乎相同,页面无法呈现。

1 个答案:

答案 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)
  }
})