从 iOS 应用程序调用时,Firebase 函数返回空值
Posted
技术标签:
【中文标题】从 iOS 应用程序调用时,Firebase 函数返回空值【英文标题】:Firebase function returning null value when called from iOS app 【发布时间】:2020-08-10 14:11:14 【问题描述】:我正在从我的 ios 应用程序调用一个可调用的 firebase 函数,并得到一个 null 的返回值。几天前才返回正确的值,但现在它总是返回 null。数据在返回行之前的控制台中正确记录,并且在 iOS 调用中没有出现错误。
exports.startPlaylist = functions.https.onCall((data, context) =>
const uid = context.auth.uid;
const signature = data.signature;
return axios.post('---url----',
data: signature
).then(function(response)
const val = response.data;
const ref = database.ref().push();
ref.set(
host:
uid: uid
,
users:
uid: uid
,
books: val
, function(error)
if(error)
console.log('Not set');
else
const info = id: ref.key ;
console.log(info) //Correct log value appears in console
return info; //Return null, however
);
).catch(function(err)
console.log(err);
);
);
Firebase 调用
Functions.functions().httpsCallable("startPlaylist").call(["signature": signature]) (result, error) in
guard let result = result, error == nil else return
print(result.data) //<-- prints "null"
【问题讨论】:
你的代码应该使用set()
返回的promise来制定响应,而不是你传递给它的错误回调。
我认为print(response.data)
应该是print(result.data)
对吗?
@bsod 是的,转换为堆栈时出现拼写错误。结果仍然为空,并且通过了最初的保护声明
【参考方案1】:
如上所述,您应该使用 set 返回的承诺:
ref.set(
host:
uid: uid
,
users:
uid: uid
,
books: val
).then(function()
const info = id: ref.key ;
console.log(info)
return info;
)
.catch(function(error)
console.log('Not set');
);
【讨论】:
以上是关于从 iOS 应用程序调用时,Firebase 函数返回空值的主要内容,如果未能解决你的问题,请参考以下文章
从 Firebase 云函数调用时,OAuth2 访问令牌交换失败
从 Flutter 应用程序连接到本地 Firebase 函数模拟器时出错