使用node-sqlite3从sqlite3数据库返回ID数组

时间:2018-12-17 20:44:56

标签: node.js 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()语句显示一个空数组。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

通过使用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)

答案 1 :(得分:0)

您将在db.each函数完成之前返回数组。这就是为什么它返回一个空数组的原因。

要获得所需的结果,您需要传递一个在拉完所有行后才回调的函数。

let ids = () => {
  let sql = `select id from users;`
  let result = []
  db.each(sql, (err, row) => {
    result.push(row.id)
  }, () => {
    console.log(result)
  })
}

ids()