Как получить данные из HTTP-запроса с облачными функциями Firebase? - PullRequest
0 голосов
/ 14 октября 2018

Я создаю функцию firebase, в облаке материал существует, в коде я возвращаю этот материал, но когда я пытаюсь получить данные в запросе http, ничего не взимается.Это моя функция в функциях firebase:

exports.autentifyuser = functions.https.onRequest((req, res) => {
    var stuff = [];
    var db = admin.firestore();
    const key=req.query.ids;

    db.collection("/usuariosdinny/").where("key","==",key).get().then(snapshot => {

        snapshot.forEach(doc => {
            var newelement = {
                "id": doc.id,
                "nombre": doc.data().nombre,
                "foto": doc.data().foto,
                "descripcion":doc.data().descripcion,
                "edad":doc.data().edad,
                "key":doc.data().key,
                "sexo":doc.data().sexo,
                "telefono":doc.data().telefono,
                "tipo":doc.data().tipo
            }
            stuff = stuff.concat(newelement);
        });
        console.log(stuff);
        res.send(stuff);
        return stuff;
    }).catch(reason => {
        res.send(reason);

        console.log(reason);
        return reason;
    })
});

это вызов:

let params: URLSearchParams = new URLSearchParams();
  params.set('ids',this.ids);
  let requestOptions = new RequestOptions();
  requestOptions.search = params;
  this.http.get('https://us-central1-dinnyud-9b9c8.cloudfunctions.net/autentifyuser',requestOptions).toPromise().then(response=>console.log(response.json()) && this.navCtrl.push(TabsControllerPage) && loader.dismiss())
  .catch(error=>alert2.present()&& loader.dismiss());

Мне нужно response.json() и получить данные "Типо".Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 14 октября 2018

Поскольку вызов для получения данных из базы данных происходит асинхронно, вам нужно сообщить Cloud Functions, что вы еще не закончили.В противном случае он может прервать выполнение вашей функции, как только будет выполнен последний }, то есть задолго до того, как данные будут получены из Firestore.

Чтобы сообщить об этом Cloud Functions, вы должны вернуть обещание.К счастью, это довольно просто, поскольку get уже возвращает обещание.

return db.collection("/usuariosdinny/").where("key","==",key).get().then(snapshot => {

    snapshot.forEach(doc => {
...