Promise:循环后执行

我想用水线ORM在循环中创build几个条目。 每个创build的对象被推入一个数组中。 所有对象创build完毕后,我需要返回完整的数组。

这是我的代码:

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返回的数组成员等于创build的叶子数组。

但当然是这个部分

  Tree.array = array; return Tree; 

执行befure数组被填充。 而我得到的是我的Tree对象:

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

只有在创build所有对象之后,我才能确保执行此部分?

先谢谢您。

承诺知道什么时候以前的承诺是通过链接完成的。 你可以也应该利用它。

promiseLoop返回一个承诺:

  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 }