J'utilise NodeJS comme back-end hébergé sur les fonctions Firebase pour interroger ma base de données firebase, j'ai ce code:interrogation de base de données Firebase prendre à beaucoup de temps dans Nuage Fonction
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const cors = require('cors')({origin: true});
admin.initializeApp(functions.config().firebase);
const express = require('express')
exports.getAjax = functions.https.onRequest((request, response) => {
cors(request, response,() => {
console.log("request.body :", JSON.stringify(request.body));
console.log("request.query :", JSON.stringify(request.query));
var date = {
startDate: request.body.startDate,
endDate: request.body.endDate
}
var db = admin.database();
var logsDbPath = 'logs';
var usersDbPath = 'users';
var ref = db.ref(logsDbPath);
var tags;
db.ref(usersDbPath).once('value').then(function(tagsSnapshot) {
tagsSnapshot.forEach(function(tagSnapshot) {
var tagId = tagSnapshot.key;
tagSnapshot.forEach(function(sessSnapshot) {
var userSessId = sessSnapshot.key;
var userInfo = sessSnapshot.val();
});
});
tags = JSON.parse(JSON.stringify(tagsSnapshot.val()));
console.log(tags);
});
});
});
Mon principal problème est que console.log(tags);
et fait la finition de la requête et obtenir la valeur des balises a ~ 38 sec dans ce cas (parfois prend ~ 1 min), je mettrai l'image ci-dessous:
et cet objet, il est pas grand du tout, comme 100 rangées avec 4 p Roperties chacun, je ne pense pas que cela devrait prendre autant, probablement que j'ai fait quelque chose de mal, mais où?, je dois aussi écrire une promesse ou un rappel afin d'envoyer cette variable var réponse sur le front, provoquer la fonction finir avant d'avoir une valeur sur les tags (voir photo), je viens d'un arrière-plan PHP et ce concept javascript asynchrone est assez récent pour moi.
Merci beaucoup pour votre réponse, c'est un grand honneur, j'apprécie vraiment firebase, tout le respect dû à toute votre équipe! Pour en revenir au code, j'ai eu le response.status (200) .send (JSON.stringify (tags)); à la fin mais mon erreur était je l'ai mis en dehors de la portée de la fonction, la fonction terminée et je n'ai aucun objet, mais en déplaçant la réponse envoyer à l'intérieur de la fonction a fonctionné, petite modification, pour une raison quelconque res.status (200) .send (étiquettes); mais j'ai changé avec response.status (200) .send (tags); et a travaillé, en ce qui concerne la vitesse de la requête semble maintenant bien, je vais le tester plus, merci! –
Bonne prise sur la faute de frappe. J'ai mis à jour ma réponse pour y remédier. –