我一直在从事离子项目,我正尝试从我的应用程序直接调用云函数。该调用开始执行,但是不写我需要编码的文档才能写到数据库中。我什至无法判断该功能是否正在运行,因为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'字符串来测试我的消息是否到达了后端,但仍然没有从后端读取数据。我将为您提供帮助
答案 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
函数中,将其转换为promise
和awaited
以便解析。我相信这也是编写代码的最干净的方法。 ?
答案 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);
})