javascript - 使用node sqlite3异步获取所有数据

标签 javascript node.js sqlite

我需要使用 db.all() 异步获取所有数据。我不想在回调中运行其他功能/代码。我想“导出”结果。可以吗?

* 我是 SQLite 的新手 😬 *

const sqlite3 = require('sqlite3').verbose()
const db = new sqlite3.Database('./db/subscribers.db')

const createSQLStatement = `CREATE TABLE IF NOT EXISTS subscriptions (id INTEGER PRIMARY KEY AUTOINCREMENT, subscriber TEXT)`
db.run(createSQLStatement)

exports.getAllSubscribers = async () => {
  const $sql = `SELECT * FROM subscriptions`
  return await db.all($sql, (err, rows) => {
    if (err) {
      return
    }

    // I wish to export "rows" which is an array
    return rows
  })
}

在另一个文件中

const { getAllSubscribers } = require('./foo')

getAllSubscribers().then(subs => {

  // subs is not what I expect it to be.
  // I'm getting:
  // Database { open: true, filename: './db/subscribers.db', mode: 65542 }
  // But I do need subs here to loop over and not inside of getAllSubscribers()

})
.catch(e => console.log(e))

我也看过 this doc但似乎没有什么能给我预期的结果。

最佳答案

当您使用thencatch 时,您不会使用await

所以你需要改进你的第一个脚本:

const sqlite3 = require('sqlite3').verbose()
const db = new sqlite3.Database('./db/subscribers.db')

const createSQLStatement = `CREATE TABLE IF NOT EXISTS subscriptions (id INTEGER PRIMARY KEY AUTOINCREMENT, subscriber TEXT)`
db.run(createSQLStatement)

exports.getAllSubscribers = () => {
  const $sql = `SELECT * FROM subscriptions`
  return db.all($sql, []);
}

在另一个文件中你可以像这样使用await:

const { getAllSubscribers } = require('./foo')
const getSubscribers = async () => {
    const subscribers = await getAllSubscribers();
};

您可以在此处找到更多示例:https://www.scriptol.com/sql/sqlite-async-await.php

关于javascript - 使用node sqlite3异步获取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55143166/

相关文章:

node.js - 配置后无法使用 "cmd"命令安装bower和yeoman

sql - Ruby on Rails - SQL 查询计数

javascript - 使用 React,如何调用名称中带有变量的模块?

javascript - 我是否将 Javascript 用于 HTML <select> 需要影响两个变量?

javascript - 回调中的值不会在每次函数调用时更新

iphone - 关闭手机、手机短信应用程序不成功

java - 数据未插入到 android 上的 SQLite 数据库中?

javascript - 选择具有 (x,y) 坐标的元素

javascript - 在 MEAN.JS 堆栈中运行 jQuery 代码

javascript - Socket.io 数组访问