我有一个简单的for循环,如下所示:
var array = [];
for (var key in results) {
con.query('SELECT * FROM table WHERE id = ?', [results[key]], function (err, res, fie) {
array.push(res);
});
}
res.json({result: array});
循环中的代码需要时间来执行,因此在循环有时间结束之前发送结果,因此我的数组的值不正确。
我查了一下,但无法找到对此案件的正确答案。我想知道我的代码在继续之前等待循环完全执行的可能性是什么?
谢谢,任何帮助非常感谢
答案 0 :(得分:0)
如果你永远不让jfriend知道你正在使用什么数据库,这里应该有用的东西
// a "promisified" con.query ... though, not sure what the `fie` argument is
// as it's not used, it wont matter
const queryP = (sql, ...args) =>
new Promise((resolve, reject) =>
con.query(sql, ...args, (err, res, fie) =>
err ? reject(err) : resolve(res)
)
);
现在,您的代码可以编写
results // if results is an Object, use: Object.values(results) instead
.map(result => queryP('SELECT * FROM table WHERE id = ?', result))
.then(result => res.json({result}));