db.js icon indicating copy to clipboard operation
db.js copied to clipboard

Global 'server' variable becomes undefined?

Open radiolondra opened this issue 3 years ago • 1 comments

I'm using a function to open the database and try to use the assigned server variable in other functions:

var server;

function OpenDB() {
  db.open({
      .....
  }).then(function(s) {
    server = s;
  });
}

function DoSomethingInDB() {
  console.log("Server var:", server); <<<< undefined
  server.mytable.count().then(function(ct) {  <<<error: Cannot read properties of undefined (reading 'mytable')
    ...
  });
}

....

OpenDB();
DoSomethingInDB();

My database is successfully created in OpenDB(). Unfortunately, it seems that the global server var becomes undefined outside the OpenDB function. From documentation:

A connection is intended to be persisted, and you can perform multiple operations while it's kept open

But I didn't close it. Bah? For sure I'm doing something wrong. Can you help me? Thanks.

radiolondra avatar Dec 27 '22 08:12 radiolondra

Hey, I do not think this is an issue. Your then() is likely executing after DoSomethingInDB() so server is not even assigned to yet. To avoid this, in an async function, you need to await db.open().

Try this for example:

var server;

async function OpenDB() {
    await db.open("somedb").then(function (s) {
        server = s;
    });
}

function DoSomethingInDB() {
    console.log("Server var:", server);
    server.mytable.count().then(function (ct) {

    });
}

async function Exec(){
    await OpenDB();
    DoSomethingInDB();
}

Exec();

Anyway, this is how promises work and there is nothing wrong with the library itself in the example you provided.

SpicyCatGames avatar Jul 25 '23 06:07 SpicyCatGames