如何检测Firebase管理员初始化何时完成

时间:2020-04-12 11:16:57

标签: node.js firebase google-cloud-firestore google-cloud-functions firebase-admin

我正在研究一个api的响应时间非常重要的api(在此答案的上下文中:https://stackoverflow.com/a/60910024/4378475)我有两个数据库初始化,mongodb和firebase,我想确切地计算它需要多少时间需要连接这些数据库

这是我的代码:

const dbURI = `mongodb://xxxxxxxxxxxxxxxx`
let timeCounter = 0;

export function initMongoDb() {

    timeCounter = Date.now();

    if (mongoose.connection.readyState !== mongoose.STATES.connected
        && mongoose.connection.readyState !== mongoose.STATES.connecting) {

        console.log("initializing mongoose");

        mongoose.connect(dbURI, {
            useNewUrlParser: true, useUnifiedTopology: true
        }).catch(e => {
            console.log("mongo connection failed for reason: ", e);
        })
    } else {
        console.log("mongoose already connected: ", mongoose.STATES[mongoose.connection.readyState], "took: ", Date.now() - timeCounter, "ms");
    }
}

mongoose.connection.on('connected', function () {//connected
    console.log("mongooseListner: Mongoose is connected, took: ", Date.now() - timeCounter,"ms");
});

这给了我这样的日志:

> mongooseListner: Mongoose is connected, took: 1310 ms

> mongoose already connected: connected took: 0 ms

我想要相同的东西用于Firebase数据库,这是我的代码:


export function initFirebase(){
    if (admin.apps.length === 0) {
        console.log("initializing firebase database");
        admin.initializeApp(functions.config().firebase)
    }else{
        console.log("firebase is already initialized");
    }
}

但是firebase initializeApp方法不提供(到目前为止,我所掌握的知识和文档所能提供的)任何promise或connected事件,因此我无法计算初始化实际花费的时间

请提出我该怎么做,任何解决方法都将适用

1 个答案:

答案 0 :(得分:0)

FirebaseApp实例的初始化是同步的。因此,initializeApp调用返回时,它就完成了。

timeCounter = Date.now();
initFirebase();
console.log("Initializing Firebase took: ", Date.now() - timeCounter,"ms");

但是请注意,这只是初始化了一些局部变量,而Mongoose代码似乎实际上已连接到数据库。 Firebase客户端与Firestore后端之间的连接是无连接的,因此与您对Mongoose所做的工作并不完全相同。您可能获得的最接近的记录是第一次写入或读取操作花费的时间。