結果セットから反復処理する必要があります。私は動作するコードを持っていますが、何か間違っていると思います。このようにしてはいけません。 私はこれがブロックコードであると感じています。sequlize結果セット内で反復する
projects.forEach(function (res) {
projectList.push(res.dataValues.PartId);
});
をしてから、このコードは、別のクエリとして実行されます:
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);
});
この反復部分が行われます。
models.Customers.findAll({
where: {'id': {in: [projectList]}}
}).then(function (customers) {
reply(customers).code(200);
}, function (rejectedPromiseError) {
reply(rejectedPromiseError).code(401);
});
私はそれをどのようにrearangeでき これは動作するコードですそれは約束を使用しますか?
EDIT(可能な解決策): 少し遊んだ後、私は約束を果たしたと信じています。
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のような多くの不要なオブジェクトが含まれているようです。どのように私はそれを平らにすることができますので、複雑なループを避けるために?
をリファクタリングしていただきありがとうございます確認 :) –