【问题标题】:Return array of ids from sqlite3 database using node-sqlite3使用 node-sqlite3 从 sqlite3 数据库返回 id 数组
【发布时间】:2019-01-09 04:49:47
【问题描述】:

我想使用 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() 语句打印一个空数组。我做错了什么?

【问题讨论】:

  • 在添加任何内容之前打印数组。你必须等待完成。

标签: node.js node-sqlite3


【解决方案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)

【讨论】:

    【解决方案2】:

    您将在 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()
    

    【讨论】:

    • 感谢您的回复。我的目标是调用一个返回 id 数组的函数。我怎样才能做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 2013-05-28
    • 2021-06-19
    • 2018-05-23
    • 2013-03-12
    • 2017-08-13
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多