node.js - 同步运行 Node sqlite3代码

标签 node.js typescript sqlite

我在适应 Node/js/TypeScript 的异步优先性质时遇到了困难。这个小函数的意图应该非常清楚:它需要一个数据库并返回该数据库中列出的类(class)数组。

问题是 return 语句在任何数据库操作运行之前运行,并且我得到一个空列表。当我在数据库 each 循环中设置断点时,我可以看到行被找到,并且类(class)被一一放入 ret 中,但这些类(class)永远不会在调用 courseList() 的范围内变得可见。

const courseList = (database: sqlite3.Database): Course[] => {
    let ret = new Array<Course>();

    database.serialize();
    database.each("select ID, Title from Course", (err: Error, row: Object) => {
        ret.push(new Course(
            row.ID,
            row.Title
        ))
    })

    return ret;
}

建议?

调用代码只是想打印有关类(class)的信息。例如:

let courses = courseList(db);
console.log(courses.length); // logs 0, even though the db contains courses

最佳答案

database.each 进行一次完整的回调。用它来恢复,例如

const courseList = (database: sqlite3.Database, complete): Course[] => {
    let ret = new Array<Course>();

    database.serialize();
    database.each("select ID, Title from Course", (err: Error, row: Object) => {
        ret.push(new Course(
            row.ID,
            row.Title
        ))
    }, complete);

    return ret;
}
let courses = courseList(db, () => {
    console.log(courses.length); 
});

更多

关于node.js - 同步运行 Node sqlite3代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458921/

相关文章:

javascript - 如何调试 node.js React Express 应用程序

node.js - 有没有办法使用聚合从 Mongoose 的 ObjectId 获取日期?

node.js - MongoDB - Mongoose 数组从文档中提取

javascript - TypeScript 声明方法返回类型是类或子类的实例类型

javascript - 如何在服务中缓存数据?

javascript - Bluebird promise 决心扬 sails

javascript - typescript :对象可能是 'undefined'

java - 如果在 android 中的 SQLite 事务期间,第二个线程尝试在同一个表上进行事务,会发生什么情况?

sqlite - 如何在窗口中找到计算值的最大值?

ios - Xcode访问外部数据库文件的方法