Return 使用 node-sqlite3 来自 sqlite3 数据库的 id 数组
Return array of ids from sqlite3 database using node-sqlite3
我想使用 node-sqlite3 库从 sqlite 查询构建一个 ID 数组。
const sqlite3 = require('sqlite3')
const db = new sqlite3.Database('./db/database-name.db')
let ids = () => {
let sql = `select id from users;`
let result = []
db.each(sql, (err, row) => {
// console.log(row.id)
result.push(row.id)
})
return result
}
console.log(ids())
console.log()
语句打印一个空数组。我做错了什么?
您在 db.each
函数完成之前返回数组。这就是为什么它 returns 一个空数组。
要完成所需的结果,您需要传递一个函数,该函数会在拉取所有行后回调。
let ids = () => {
let sql = `select id from users;`
let result = []
db.each(sql, (err, row) => {
result.push(row.id)
}, () => {
console.log(result)
})
}
ids()
我能够通过使用 Promise 包装对 db.each
的调用来实现预期的结果:
const selectIds = () => {
return new Promise((resolve, reject) => {
let result = []
db.each(`select id from users;`, (err, row) => {
if(err) { reject(err) }
result.push(row.id)
}, () => {
resolve(result)
})
})
}
selectIds().then((ids) => console.log(ids)
我想使用 node-sqlite3 库从 sqlite 查询构建一个 ID 数组。
const sqlite3 = require('sqlite3')
const db = new sqlite3.Database('./db/database-name.db')
let ids = () => {
let sql = `select id from users;`
let result = []
db.each(sql, (err, row) => {
// console.log(row.id)
result.push(row.id)
})
return result
}
console.log(ids())
console.log()
语句打印一个空数组。我做错了什么?
您在 db.each
函数完成之前返回数组。这就是为什么它 returns 一个空数组。
要完成所需的结果,您需要传递一个函数,该函数会在拉取所有行后回调。
let ids = () => {
let sql = `select id from users;`
let result = []
db.each(sql, (err, row) => {
result.push(row.id)
}, () => {
console.log(result)
})
}
ids()
我能够通过使用 Promise 包装对 db.each
的调用来实现预期的结果:
const selectIds = () => {
return new Promise((resolve, reject) => {
let result = []
db.each(`select id from users;`, (err, row) => {
if(err) { reject(err) }
result.push(row.id)
}, () => {
resolve(result)
})
})
}
selectIds().then((ids) => console.log(ids)