Angular Fire Functions调用但未运行

时间:2018-11-24 10:15:29

标签: javascript firebase google-cloud-firestore google-cloud-functions angularfire2

我一直在从事离子项目,我正尝试从我的应用程序直接调用云函数。该调用开始执行,但是不写我需要编码的文档才能写到数据库中。我什至无法判断该功能是否正在运行,因为console.log语句在我的日志控制台上没有给出任何结果。这是我后端的云功能代码

exports.usedDevices = functions.https.onCall((data,context)=>{
 console.log(data);
 console.log(context);
 console.log('This started running');
 admin.firestore()
   .collection('devices/{documentId}')
   .get()
   .then(val=>{
     if(val.empty === false){
       val.forEach(function(snapshot): boolean | void{
         if(snapshot.data() === data){
           return false
         }
       })
        admin.firestore()
        .collection('devices')
        .add(
          data
        )
        .catch(er=>{
          console.log(er);
          return er;
        }) 
        return true
     }
     else{
       admin.firestore()
         .collection('devices')
         .add(
           data
         )
         .catch(er=>{
           console.log(er);
           return er;
         })
         return true
     }
   })
   .catch(er=>{
     console.log(er);
     return er
   })

})

然后从我的应用程序中尝试调用此函数

 const uid="This is my uid";
const call = this.aff.httpsCallable('usedDevices');
call(uid).toPromise()
.then(res=>{
  console.log(res);
})
.catch(er=>{
  console.log(er);
})

我正在使用一个简单的'这是我的uid'字符串来测试我的消息是否到达了后端,但仍然没有从后端读取数据。我将为您提供帮助

2 个答案:

答案 0 :(得分:2)

您需要将其作为对象传递:{uid: uid}

这是一个干净的示例:

async processUsedDevices() {
   const uid = "abcd1234";
   const call = this.aff.httpsCallable('usedDevices');
   
   //                         {uid: uid}   <-- This solves your problem
   const results = await call({uid: uid}).toPromise();
   return results;
}

我将其放在async函数中,将其转换为promiseawaited以便解析。我相信这也是编写代码的最干净的方法。 ?

答案 1 :(得分:0)

尝试在不使用“ toPromise()”的情况下调用函数

 const uid="This is my uid";
const call = this.aff.httpsCallable('usedDevices');
call(uid)
.then(res=>{
  console.log(res);
})
.catch(er=>{
  console.log(er);
})