【问题标题】:Javascript build an array with values from a callback [duplicate]Javascript使用来自回调的值构建一个数组[重复]
【发布时间】:2020-07-27 19:53:24
【问题描述】:

我正在为消息应用程序创建一个 nodejs api(使用 express),我正在使用 sqlite3 作为数据库软件。

编辑: 我被这个功能卡住了,我怎样才能让它工作?

const sqlite3 = require('sqlite3');


function recentConvos(){
	let result = []
	uid = 58;
	db.all('SELECT DISTINCT U.id, U.name FROM users U, messages M WHERE (M.sender='+uid+' OR M.dest='+uid+')  AND (U.id = M.sender OR U.id = M.dest) AND (U.id != '+uid+') ORDER BY M.id DESC',(err,rows)=>{
		result.push(rows)
	});
	return result;
}


let db = new sqlite3.Database('./database.db', (err)=>{
	if(err){
		console.log('ERROR DATABASE')
	}
	else{console.log('CONNECTED TO DATABASE')}
})

console.log(recentConvos())

【问题讨论】:

  • 使用rows.forEach()

标签: javascript node.js asynchronous async-await callback


【解决方案1】:

一个简单的 for 循环应该可以解决问题。您可以在嵌套查询中使用rows[i].some_field,如下所示:

app.get('/o', (req, res) => {
   db.all('sql query here', (err, rows) => {
      let result = []
         for (i = 0; i < rows.length; i++) {
            db.all('another query ... WHERE something = ?', [rows[i].some_field], (err, rows2) => {
               result.push(rows2.field)
            })
         }
    })
    res.send(result) 
})

【讨论】:

  • db.all 中的第二个参数是什么?
  • 第二个参数是您在查询中拥有的参数数组。这将替换问号并用于转义以避免 sql 注入。你可以在这里阅读更多信息:sqlitetutorial.net/sqlite-nodejs/query
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
相关资源
最近更新 更多