async.waterfall не рендерит в конце - PullRequest
0 голосов
/ 01 мая 2018

Я пытался использовать 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 голосов
/ 01 мая 2018

Я наконец-то решил это, но это был не кусок пирога .... Я должен признать, что я не полностью удовлетворен, я получаю доступ к изображениям и выставкам результат только потому, что я нажимаю их во вкладке при их создании. Я надеялся, что это позволит водопаду подождать, пока соединение совершится, прежде чем получить творение в конце водопада, .... Это странно, потому что когда я получаю доступ к данным через страницу со списком элементов, мои вкладки объединяются со всеми данными внутри. И это тот же добытчик. Я должен работать над этим больше, чтобы найти действительно хорошее решение.

вот мой водопад:

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