【发布时间】:2018-11-25 23:03:50
【问题描述】:
我正在尝试将孔主/细节对象返回给客户端,但细节以空数组的形式出现 就像this post 我也遇到了同样的问题:
"Can't call res.send(data) inside the loop because res.send() can only be called once."
"But if I call res.send(array) outside of the loop, the array is still empty"
正确的做法是什么? 我试图不使用 asyn
var getMasterDetail = function (req, res) {
const key = "Detail";
var list = {}
list[key] = []
var modelsMaster = objModels.ObjMaster
var modelsDetail = objModels.objDetail
modelsMaster.getMasters(objModels.hdb, (e, master) => {
if (e) {
return console.log(e);
}
for (i = 0; i < master.length; i++) {
modelsDetail.getDetails(objModels.hdb, master[i].nrMaster, (e, detail) => {
if (e) {
return console.log(e);
}
for (j = 0; j < detail.length; j++) {
list[key].push(detail[j])
}
})
master[i].DetailList = list
};
res.send({ MasterDetail: master })
})
};
谢谢。
更新:@Hammerbot 的答案几乎是正确的,但是,
当时我没有注意到,我得到了所有大师的相同细节。
前任。 {master:{1,2,3,4,5,6}, master{1,2,3,4,5,6}} 而不是 {master:{1,2,3}, master{4,5,6}}
我不知道为什么以及如何解决它。我尝试在循环之前清理列表,并移动 master master[i].DetailList,为第二个循环创建第二个 Promise,但没有成功。
【问题讨论】:
-
如果您使用回调,使用
async.forEach可能是正确的方法。如果使用 Promise,你的代码可能会简单得多。 -
支持@schu34 对 Promises 的推荐。
Promise.all似乎非常适合这里。