问题描述
有一个函数可以将我的应用程序连接到我在 fastify.register()
中作为参数传递的 mongoose/mongodb。它抛出一个错误,内容为:
UnhandledPromiseRejectionWarning:错误:ERR_AVVIO_PLUGIN_TIMEOUT: 插件没有及时启动:mongoose_default。你可能忘记了 调用 'done' 函数或解决 Promise
最初,该函数如下所示:
export default async function (
fastify: FastifyInstance | never,options: { uri: string },done: DoneFuncWithErrOrRes,) {
try {
await mongoose.connect(options.uri,{
useNewUrlParser: true,useUnifiedTopology: true,useCreateIndex: true,});
console.log('MongoDB connection successful.');
} catch (err) {
console.error(err.message);
}
done();
}
我意识到 done()
在猫鼬连接之前首先执行,因为 mongoose.connect()
是异步的。所以我试着把 done()
放在 setTimeout()
里面,就像这样:
export default async function (
fastify: FastifyInstance | never,});
console.log('MongoDB connection successful.');
} catch (err) {
console.error(err.message);
}
setTimeout(() => {
done();
},0);
}
我连接猫鼬并使用 fastify.register()
的方式有什么问题吗?
解决方法
代码必须写在:
- 回调样式(又名
done
) - 或
async
样式
不是两者都碰撞,因为它们发生碰撞。
如果您删除 done
调用,一切都将起作用