android - 为什么我的云函数返回最后一个返回值而不是之前的返回值?
问题描述
我在客户端有一个按钮,可以帮助我测试后端功能的简化版本。出于某种原因,客户端(Android Studio 中的 Logcat)正在返回test button isUsernameAvailable: Success. result.data = 2000
. 当我查看 Firebase 控制台时,我看到代码已达到_isUsernameAvailable REACHED THEN
. 但是,我不明白为什么客户收到的是 a2000
而不是5
. 如果它到达上述部分,则后面的行显示为return 5
。为什么我的客户没有收到5
?
客户端代码:
testbutton.setOnClickListener() {
functions = Firebase.functions
var data = hashMapOf<String, Any>()
data["username"] = "ThisUsernameDoesntExist"
functions.getHttpsCallable("isUsernameAvailable")
.call(data)
.addOnSuccessListener {result ->
Log.e(tag, "test button isUsernameAvailable: Success. result.data = " + result.data.toString())
}
.addOnFailureListener {exception ->
Log.e(tag, "test button failure exception: $exception")
}
}
云函数代码:
//Check if username is available (callable from client)
exports.isUsernameAvailable = functions.https.onCall(async(data, context) => {
const username = data.username
await admin.firestore().collection('users').where('username', '==', username).limit(1).get()
.then(result => {
console.log('_isUsernameAvailable REACHED THEN ')
return 5
})
.catch(error => {
console.log('_isUsernameAvailable REACHED CATCH ')
return 6
})
return 2000
});
解决方案
这个答案部分解释了你的代码发生了什么。要应用于您的案例,return 5
只是从 Firestore 回调函数返回,并且不会导致您的主函数进程结束。
一种解决方案是创建一个变量,以便在遇到事件时分配值而不是返回它:
exports.isUsernameAvailable = functions.https.onCall(async(data, context) => {
const username = data.username
var returnCode = 0
await admin.firestore().collection('users').where('username', '==', username).limit(1).get()
.then(result => {
console.log('_isUsernameAvailable REACHED THEN ')
returnCode = 5
})
.catch(error => {
console.log('_isUsernameAvailable REACHED CATCH ')
returnCode = 6
})
if (returnCode != 2000){
return returnCode
}
return 2000
});
推荐阅读
- tfs - 路径下的 TFS 搜索代码并组合范围
- hadoop - 为什么 MapReduce 失败/超时?
- excel - 运行时错误“13”:清除单元格内容时类型不匹配
- json - 如何获取通过 .onWrite 云函数事件返回的动态通配符子键的值?
- mysql - 超出范围的十进制类型Mysql?
- angular - 开始一个新页面而不是在 router-outlet 下追加
- button - App Inventor 中的语音识别器不适用于字符串
- dynamics-crm - 如何在不冻结 Dynamics 365 CE 的情况下一次添加 50 多个子组件?
- ms-access - 如何在 Microsoft Access 中拥有依赖于多个基于时间的字段/属性的不同字段/属性?
- visual-studio - 有没有一种方法可以关联/分组一组在 TFS/VS 中更改的文件,而不管更改集如何