как определить, когда инициализация администратора Firebase завершена - PullRequest
0 голосов
/ 12 апреля 2020

Я работаю над API, где время ответа API очень важно (в контексте этого ответа: { ссылка }) У меня есть две инициализации базы данных, 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");
    }
}

, но метод initializeApp в Firebase не обеспечивает (лучший из моих знания и документы, которые я прошел до сих пор) любое обещание или связанное событие, поэтому я не могу подсчитать, сколько времени на самом деле требуется для инициализации

, пожалуйста, предложите, как я могу это сделать, любой обходной путь будет оценен

1 Ответ

0 голосов
/ 12 апреля 2020

Инициализация экземпляра FirebaseApp происходит синхронно. Поэтому, когда возвращается вызов initializeApp, это делается.

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

Обратите внимание, однако, что это просто инициализирует некоторые локальные переменные, в то время как код Mon goose, кажется, фактически подключается к базе данных. Соединение между клиентом Firebase и бэкэндом Firestore без установления соединения, поэтому нет реального эквивалента тому, что вы делаете для Mon goose. Самое близкое, что вы можете получить, это запись того, сколько времени занимает первая операция записи или чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...