首页 > 解决方案 > 异步命令未运行

问题描述

不知道为什么我在这里没有得到 console.log

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 };

当我使用这个单例时,我得到一个console.log,console.log('entering migrate');但不是第二个或第三个console.log

标签: javascript

解决方案


如果没有它的代码,我只是在猜测,但正如 Bergi 正确指出的那样,如果执行停止在inMemoryDb.public.migrate,它可能不会解决或拒绝 Promise。这是一个猜测,它可能是什么样子:

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

以及如何解决它:

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

推荐阅读