Angular Fire Functions 调用但未运行

Posted

技术标签:

【中文标题】Angular Fire Functions 调用但未运行【英文标题】:Angular Fire Functions calling but not running 【发布时间】:2018-11-24 10:15:28 【问题描述】:

我一直在从事 ionic 项目,我正在尝试从我的应用程序中直接调用云函数。此调用开始执行但不写入我需要将其编码以写入我的数据库的文档。我什至无法判断该函数是否正在运行,因为 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”字符串来测试我的消息是否曾经到达后端但仍然没有从我的后端读取数据。我将不胜感激

【问题讨论】:

【参考方案1】:

您需要将其作为对象传入:uid: uid

这是一个干净的代码示例:

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

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

【讨论】:

【参考方案2】:

尝试在没有“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);
)

【讨论】:

这不起作用,我在想,因为您不能为非 Observable 类型的变量调用 .then()。在尝试从我的服务器读取响应之前,我调用了 Onpromise 将响应更改为承诺 您确定您的提供商“this.aff”@user10112707 是的,我可以在我的 firebase 函数日志中看到该函数正在启动,但未显示传递的数据,并且它在不执行我编写的任何命令的情况下运行

以上是关于Angular Fire Functions 调用但未运行的主要内容,如果未能解决你的问题,请参考以下文章

firebase_app__WEBPACK_IMPORTED_MODULE_5__.app(...).functions 不是函数

如何修复:“@angular/fire”'没有导出成员 'AngularFireModule'.ts(2305) ionic、firebase、angular

在 VScode 中找不到 @angular/fire/firestore 模块错误

如何将@angular/fire 添加到 Nx 工作区(Angular 项目)?

Angular2 fire 没有导出成员“FirebaseListObservable”

在 @angular/fire 中找不到 AngularFireModule 和 AngularFireDatabaseModule