gpt4 book ai didi

promise - 在 sequelize 结果集内迭代

转载 作者:行者123 更新时间:2023-12-03 22:23:56 24 4
gpt4 key购买 nike

我需要从 Sequelize 结果中迭代结果集。我有一个有效的代码,但我认为它有问题,不应该这样做。
我有一种感觉,这是一个阻塞代码。
这是有效的代码:

 models.Project.findAll({
where: {ProjectId: projectId}
})
.then(function (projects) {
//Iteration is here
var projectList = [];
projects.forEach(function (res) {
projectList.push(res.dataValues.PartId);
});
//then bulk lookup for the result
models.Customers.findAll({
where: {'id': {in: [projectList]}}
}).then(function (customers) {
reply(customers).code(200);
}, function (rejectedPromiseError) {
reply(rejectedPromiseError).code(401);
});

//reply(sameparts).code(200);
}, function (rejectedPromiseError) {
reply(rejectedPromiseError).code(401);
});

本次迭代部分完成:
projects.forEach(function (res) {
projectList.push(res.dataValues.PartId);
});

然后这段代码作为另一个查询执行:
models.Customers.findAll({
where: {'id': {in: [projectList]}}
}).then(function (customers) {
reply(customers).code(200);
}, function (rejectedPromiseError) {
reply(rejectedPromiseError).code(401);
});

我怎样才能重新排列它以便它使用 Promises?

编辑(可能的解决方案):
玩了一会儿,我相信我已经实现了 promise 。
getAll: function (request, reply) {
var projectId = request.params.projectid;

var promises = [];
var post;

models.SamePart.findAll({
where: {ProjectId: projectId}
})
.then(function (sameparts) {
//Iteration is here
sameparts.forEach(function (res) {
promises.push(
Promise.all([
models.Parts.findAll({where: {id: res.dataValues.PartId}})
]))
});
//Bulk lookup for the parts that were marked as identical

return Promise.all(promises);
}).then(function (completepartslist) {
reply(completepartslist).code(200);
});

这是正确的方法吗?似乎 completepartslist 包含许多不需要的对象,包括 Promise 的东西。我怎样才能展平它,以避免复杂的 for 循环?

最佳答案

如果您正在使用 .then() ,那么您很可能已经在使用 promise。

您的原始工作代码似乎没有阻塞。

您最终的 getAll() 看起来应该简化为:

getAll: function (request, reply) {
models.SamePart.findAll({
where: { ProjectId: request.params.projectid }
}).then(function (sameparts) {
return Promise.all(sameparts.map(function (res) {
return models.Parts.findAll({ where: { id: res.dataValues.PartId } });
}));
}).then(function (completepartslist) {
reply(completepartslist).code(200);
});
}

但是,您需要重新添加错误处理。

关于promise - 在 sequelize 结果集内迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195638/

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