Heim > Fragen und Antworten > Hauptteil
Ich möchte ein Array außerhalb des Funktionsblocks füllen
app.get('/getpackages/:dateStart/:dateEnd/:limit', function (req, res) { var xlsSourceFilesRetrievedTsdz = [] var xlsSourceFilesRetrievedSvn = [] var dateStart = req.params.dateStart; var dateEnd = req.params.dateStart; var limit = Number(req.params.limit); let sql = 'SELECT * FROM summary_dz WHERE Start != "" AND Start BETWEEN ? AND ? LIMIT ?' db.query(sql, [dateStart,dateEnd,limit], function (err, results) { if (err) throw err; for (const counter in results) { xlsSourceFilesRetrievedTsdz.push(results[counter].XlsSourceFile); } // console.log(xlsSourceFilesRetrievedTsdz) }); console.log(xlsSourceFilesRetrievedTsdz)
Ich möchte es ausfüllenxlsSourceFilesRetrievedTsdz
. Stimmt etwas mit dem, was ich geschrieben habe, nicht? Ich erhalte ein leeres Array. Das console.log innerhalb des Blocks im Kommentar liefert das gewünschte Ergebnis. Wie kann ich es von außerhalb des Blocks erhalten?
P粉7594574202024-02-22 11:05:55
这样做应该有效:
app.get('/getpackages/:dateStart/:dateEnd/:limit', async (req, res) => { var xlsSourceFilesRetrievedTsdz = [] var xlsSourceFilesRetrievedSvn = [] const promiseQuery = (sql, dateStart, dateEnd, limit) => { return new Promise((res, rej)=> { db.query(sql, [dateStart,dateEnd,limit], function (err, results) { if (err) rej(err); res(results) }); }) } const sql = 'SELECT * FROM summary_dz WHERE Start != "" AND Start BETWEEN ? AND ? LIMIT ?' const dateStart = req.params.dateStart; const dateEnd = req.params.dateStart; const limit = Number(req.params.limit); const results = await promiseQuery(sql, dateStart, dateEnd, limit) for (const counter in results) { xlsSourceFilesRetrievedTsdz.push(results[counter].XlsSourceFile); } console.log(xlsSourceFilesRetrievedTsdz) }
我在这里所做的是将整个事情包装在一个 Promise 中并将其返回以等待结果。