首页 > 解决方案 > async.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(datas) 不起作用。相反,我的表单页面仍在加载。

另一个问题是代码的优化:我试图在瀑布函数中插入 forEach,但是除了我的图像之外的所有数据都被保存了。

我还尝试在 forEach 函数的 done 内部进行渲染,实际上我做了所有这些事情来等待图像。但问题几乎一样,页面不渲染。

标签: javascriptasynchronoussequelize.jswaterfall

解决方案


我终于解决了它,但它不是小菜一碟....我必须承认我并不完全满意,我访问图像和展览结果只是因为我在创建它们时将它们推到选项卡中。我希望这是瀑布允许等待连接在瀑布末端创建之前自行生成,....这很奇怪,因为当我通过项目列表页面访问数据时,我的选项卡是连接的里面有所有的数据。它是同一个吸气剂。我必须做更多的工作才能找到一个真正好的解决方案。

这是我的瀑布:

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

推荐阅读