- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在玩 stripe,想学习如何通过以下方式获取临时 key :
后端:
//Stripe API requirement for payment
exports.stripeEphemeralKey = functions.https.onCall((data, context) => {
const uid = context.auth.uid;
//Get values
admin.database().ref().child("users").child(uid)
.on("value", (snapshot) =>{
//Get user data
let user = snapshot.val()
//Log data
console.log("Create ephemeral key for:")
console.log(user)
//Create ephemeral key
stripe.ephemeralKeys.create(
{customer: user.customerid },
{stripe_version: '2018-11-08'}
)
.then((key) => {
console.log(key)
console.log("Succesful path. Ephemeral created.")
return "Testing"
})
.catch((err) => {
console.log("Unsuccesful path. Ephemeral not created.")
console.log(err)
trở lại {
valid: false,
data: "Error creating Stripe key"
}
})
})
})
Khách hàng:
functions.httpsCallable("stripeEphemeralKey").call(["text": "Testing"]) { (result, error) in
print(result?.data)
}
我已经通过用简单的“测试”字符串替换 stripeEphemeralKey 的主体来测试此代码,并且返回正常。但是通过上面的代码,我只得到了 Optional() 。
为了测试,我添加了很多控制台日志。 Firebase 日志显示执行路径到达“成功路径。临时创建。”日志,而且我实际上可以看到我从 strip 返回的临时 key 。
那么,使用 onCall Firebase 函数在 Swift for iOS 中获取临时 key 的正确正确方法是什么?
后端做了它应该做的,但我似乎无法得到答案。
Cảm ơn.
câu trả lời hay nhất
后端实际上并没有做它应该做的事情。你在这里至少做错了两件事。
首先,您的可调用函数需要返回一个 promise ,该 promise 以您要发送给客户端的值进行解析。现在,您的函数回调根本没有返回任何东西,这意味着客户端不会收到任何东西。您在 promise 处理程序中有返回值,但您需要一个顶级 return 语句。
其次,您正在使用 on() 从实时数据库中读取数据,实时数据库附加了一个持续存在的监听器,直到它被删除。这几乎肯定不是您想要在 Cloud Function 中执行的操作。相反,使用 once() 获取您要读取的数据的单个快照,并据此采取行动。
关于ios - 如何从 Firebase httpscallable().call() 中的后端接收 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53287678/
Tôi là một lập trình viên xuất sắc, rất giỏi!