Node.js 在Sequelize中从承诺内部打破for循环
我试图在sequelize承诺中打破一个循环,当它找到第一个结果并返回第一个响应时,但它总是完成整个循环。如果我给承诺内的变量赋值,该值在承诺外消失。我已经努力了好几天了,如果有人能帮助我,我将非常感激。这是我的代码:Node.js 在Sequelize中从承诺内部打破for循环,node.js,sequelize.js,Node.js,Sequelize.js,我试图在sequelize承诺中打破一个循环,当它找到第一个结果并返回第一个响应时,但它总是完成整个循环。如果我给承诺内的变量赋值,该值在承诺外消失。我已经努力了好几天了,如果有人能帮助我,我将非常感激。这是我的代码: for (let i = (parseInt(req.query.units) - 1); i >= 0; i--) { console.log (i); db.order_planned.findAll({ where: { barcode:
for (let i = (parseInt(req.query.units) - 1); i >= 0; i--) {
console.log (i);
db.order_planned.findAll({
where: {
barcode: parseInt(req.query.barcode) + i,
stepdesc: req.query.stepdesc
},
limit: 1,
}).then((data) => {
if (data[0].length > 0) {
data[0].barcode = (parseInt(data[0].barcode) - i);
console.log(data[0]);
res.status(200).json(data[0]);
break; // illegal break
}
}).catch((error) => {
let err_msg = new ErrorMsg(error);
res.status(err_msg.status).json(err_msg);
});
}
您希望循环n个承诺并返回第一个解析的承诺。 就是这样 使用简化版本的代码:
const promises = [];
for (let i = (parseInt(req.query.units) - 1); i >= 0; i--) {
promises.push(
db.order_planned.findAll({ /*..*/ }).then((data) => {
/*..*/
return data[0]; // Found your data
});
);
}
// As soon as the first promise is returned, log it.
Promise.any(promises).then(firstResult => console.log(firstResult));
由于承诺的工作方式,在返回任何承诺之前,循环将始终完整地执行
或者,您可以使用async/await获得您想要的:
for (let i = (parseInt(req.query.units) - 1); i >= 0; i--) {
const data = await db.order_planned.findAll({ /*..*/ }); // Use await here
if (data[0].length > 0) {
/*..*/
break; // Can now do a break here
}
}
但是,这会有更差的性能,因为承诺没有并行执行。这是否回答了您的问题?