Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
80 views
in Technique[技术] by (71.8m points)

javascript - Async command is not running

not sure why I don't get a console.log here

const inMemoryDb = newDb();

// eslint-disable-next-line no-return-await
const backup = (async () => await migrate())();

async function migrate() {
  console.log('entering migrate');

  await inMemoryDb.public.migrate();
  console.log('migrate called');

  const skills = inMemoryDb.public.many("select * from skills where name = 'Swift'");
  console.log('skills', skills);

  const backup = inMemoryDb.backup();
  return backup;
}

export { inMemoryDb, backup };

when I consume this singleton, I get a console.log for console.log('entering migrate'); but not the second or third console.log

question from:https://stackoverflow.com/questions/65648227/async-command-is-not-running

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Without the code for it I'm making a guess, but as Bergi correctly pointed out, if execution stops at inMemoryDb.public.migrate, it likely is not resolving or rejecting the Promise. Here's a guess what that might look like:

function newDb() {
  return {
    public: {
      migrate: () => {
        return new Promise((resolve, reject) => {
          // does migration stuff
        });
      },
    },
  };
}

and how you might fix it:

function newDb() {
  return {
    public: {
      migrate: () => {
        return new Promise((resolve, reject) => {
          try {
            // does migration stuff
            resolve();  // <-- important!
          }
          catch (error) {
            reject();   // <-- important!
          }
        });
      },
    },
  };
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...