注册一个将应用连接到猫鼬的函数

问题描述

一个函数可以将我的应用程序连接到我在 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 调用,一切都将起作用

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...