![](/img/trans.png)
[英]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.