如何使用Firebase云功能从http请求获取数据?

时间:2018-10-13 21:11:18

标签: firebase ionic-framework google-cloud-firestore httprequest

我创建了一个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()并获取“ Tipo”数据。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

由于从数据库获取数据的调用是异步发生的,因此您需要告诉Cloud Functions您尚未完成。否则,它可能会在执行最后一个}后立即终止您的功能,而这恰好是在从Firestore检索数据之前。

要将此信息告知Cloud Functions,您必须返回一个承诺。幸运的是,这很容易,因为get已经返回了诺言。

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

    snapshot.forEach(doc => {