[英]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.