异步命令未运行

时间:2021-01-09 22:24:22

标签: javascript

不知道为什么我在这里没有得到 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('entering migrate'); 的 console.log,但不是第二个或第三个 console.log

1 个答案:

答案 0 :(得分:2)

如果没有它的代码,我只是猜测,但正如 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!
          }
        });
      },
    },
  };
}