不知道为什么我在这里没有得到 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
答案 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!
}
});
},
},
};
}