gpt4 book ai didi

javascript - promise : execute after loop

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:37 24 4
gpt4 key购买 nike

我想使用水线 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.array = array;
return Tree;

在填充数组之前执行。我得到的回应是我的 Tree 对象:

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

我要做什么才能确保仅在创建所有对象后才执行这部分?

提前谢谢您。

最佳答案

Promise 通过 then 链接知道前一个 Promise 何时完成。你可以而且应该利用它。

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
}

关于javascript - promise : execute after loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27041236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com