Skip to content

TypeError: Cannot read properties of null (reading 'close') #1795

Open
@miniBill

Description

@miniBill

Issue Summary

When I call

db.close((err) => {
    if (err) {
        reject(err);
    } else {
        resolve(db);
    }
});

I get the error:

node:events:513
  const handler = events[type];
                        ^

TypeError: Cannot read properties of null (reading 'close')
    at Database.emit (node:events:513:25)

The value of db is

image

Steps to Reproduce

// see below for how I defined the sqlite_* functions
// they're basically promisified versions of open/serialize/close

const db = await sqlite_open("../feeds.sqlite");
await sqlite_serialize({db: db, statements: [...]});
await sqlite_close(db);

export async function sqlite_open(filename: string): Promise<sqlite3.Database> {
    return await new Promise<sqlite3.Database>((resolve, reject) => {
        const db = new sqlite3.Database(filename, (err) => {
            if (err) {
                reject(err);
            } else {
                resolve(db);
            }
        });
    });
}

export async function sqlite_close(db: sqlite3.Database): Promise<{}> {
    return await new Promise<{}>((resolve, reject) => {
        debugger;
        db.close((err) => {
            if (err) {
                reject(err);
            } else {
                resolve({});
            }
        });
    });
}

export async function sqlite_serialize({
    db,
    statements,
}: {
    db: sqlite3.Database;
    statements: string[];
}): Promise<{}> {
    const promises: Promise<{}>[] = [];
    db.serialize(() => {
        for (const statement of statements) {
            console.info(statement);
            promises.push(
                new Promise<{}>((resolve, reject) => {
                    db.run(statement, [], (err) => {
                        if (err) {
                            reject(err);
                        } else {
                            resolve({});
                        }
                    });
                })
            );
        }
    });
    await Promise.all(promises);
    return {};
}

Version

5.1.7

Node.js Version

18.20.4

How did you install the library?

yarn add sqlite3

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions