[英]How to wait for N number of queries to finish before calling the callback function with Nodejs
[英]Wait for mysql to finish queries in a for loop before finishing a function in nodeJS
我正在尝试运行查询以从表中获取一些数据,然后使用该数据数组从另一个表中获取一些数据,然后将其作为 JSON 返回。
我已经尝试了一段时间,但我似乎无法弄清楚异步和等待。 现在它做了某种工作,但在返回数据之前不会等待我在 for 循环中的第二个查询完成。
app.get("/get-top-trending", (request, response) => {
const req = request.query
let query = 'SELECT Ticker, Mentions FROM trend_data ORDER BY Date DESC, ' + req.by + ' DESC LIMIT 3';
let returnData = {};
cryptoDB.query(query, (err, tickers) => {
if (err) throw err;
getData(tickers).then(function() {
response.send(returnData)
});
});
async function getData(tickers) {
for (let i = 0; i < tickers.length; i++) {
cryptoDB.query('SELECT HistoricalJSON FROM historical_trend_data WHERE Ticker=? LIMIT 1', [tickers[i]['Ticker']], (err, rows2) => {
if (err) throw err;
returnData[tickers[i]['Ticker']] = rows2[0]['HistoricalJSON'];
});
}
}
});
我假设必须在 getData async function 中做一些事情,但是我不太确定如何实现一个可行的解决方案。 我已经尝试过承诺,但它们似乎没有按我预期的方式工作。
任何指导将不胜感激。
解决方案
app.get("/get-top-trending", (request, response) => {
const req = request.query
let query = 'SELECT Ticker, Mentions FROM trend_data ORDER BY Date DESC, ' + req.by + ' DESC LIMIT 3';
cryptoDB.query(query, (err, tickers) => {
if (err) throw err;
getData(tickers).then(function (returnData) {
response.send(returnData)
});
});
function getData(tickers) {
const returnData = {};
return new Promise((resolve, reject) => {
for (let i = 0; i < tickers.length; i++) {
cryptoDB.query('SELECT HistoricalJSON FROM historical_trend_data WHERE Ticker=? LIMIT 1', [tickers[i]['Ticker']], (err, rows2) => {
if (err) reject(err);
returnData[tickers[i]['Ticker']] = rows2[0]['HistoricalJSON'];
});
}
resolve(returnData);
})
}
});
异步 function 实际上并未包装
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.