簡體   English   中英

承諾:循環執行

[英]Promise : execute after loop

我想使用水線ORM在循環中創建多個條目。 每個創建的對象都被推入數組。 創建所有對象之后,我需要返回完整的數組。

這是我的代碼:

share: function(req, res, next) {
    var params = {},
        id = req.param('id'),
        img = {},
        targets;

    if (!req.param('name')) {
      res.status(400);
      return res.json('Error.No.Name')
    }

    var promiseLoop = function(Tree) {      // Function called after creating or finding Tree to attach to
      var array = [];
      if(!req.param('targets')) return Tree; // No targets provided => exit

      targets = JSON.parse(req.param('targets'));
      _.each(targets, function(target) {
        params = {
          target : target,
          image: Tree.id,
          message : req.param('message')
        };

        Leaf
          .create(params)
          .then(function(Leaf) {
            array.push(Leaf);
          });
      });

      Tree.array = array;
      return Tree;
    }

    if (!id) {
      params.owner = req.session.user ;
      params.name = req.param('name');

      Tree
        .create(params)
        .then(function(Tree) {
          res.status(201);  // Status for image creation
          return Tree;
        })
        .then(promiseLoop)
        .then(function(data) { res.status(201); res.json(data);})
        .catch(function(err) { res.status(400); res.json(err);});
    }
  }

};

我希望Tree返回一個數組成員,該數組成員等於創建的Leafs的數組。

但是當然

  Tree.array = array;
  return Tree;

在填充數組之前執行。 我得到的響應是我的Tree對象:

{
 ...,
 "array": []
}

我該怎么做才能確保僅在創建所有對象之后才執行此部分?

預先謝謝你。

承諾知道何時通過then鏈接完成了先前的承諾。 您可以並且應該利用它。

promiseLoop返回一個promise:

  var promiseLoop = function(Tree) { // are you sure about that naming?
  if(!req.param('targets')) return Tree;
  targets = JSON.parse(req.param('targets'));
  var leaves = targets.map(function(target){
    return Leaf.create({ //  map each target to a leaf
        target : target,
        image: Tree.id,
        message : req.param('message')
      }); 
  });

  return Promise.all(leaves).then(function(leaves){
      Tree.array = leaves;  // assign to tree
  }).return(Tree); // finally resolve the promise with it
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM