Javascript 为什么云函数返回&x2018;可选();有价值
我有一个检查电子邮件是否正在使用的功能,下面是该功能的代码:Javascript 为什么云函数返回&x2018;可选();有价值,javascript,swift,firebase,google-cloud-functions,Javascript,Swift,Firebase,Google Cloud Functions,我有一个检查电子邮件是否正在使用的功能,下面是该功能的代码: import * as functions from 'firebase-functions' import * as admin from 'firebase-admin' admin.initializeApp() exports.uniqueEmail = functions.https.onCall((data) => { const email = data.email; if (!email) {
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
admin.initializeApp()
exports.uniqueEmail = functions.https.onCall((data) => {
const email = data.email;
if (!email) {
console.log('missing email')
throw new functions.https.HttpsError('invalid-argument', 'Missing email parameter');
}
return admin.auth().getUserByEmail(email).then(function(userRecord) {
console.log('Successfully fetched user data:', userRecord.toJSON());
return "true"
}).catch(function(error) {
console.log('Error fetching user data:', error);
console.log('Email: ', email)
return "false"
});
});
正如您所见,该功能确实有效,它知道电子邮件是否被接收,但它将我的应用程序返回“可选(错误)”而不是“错误”或“真实”
这是我的Xcode代码:
IBAction func nextPressed(_ sender: Any) {
var result = ""
if(emailInputField.text != ""){
Functions.functions().httpsCallable("uniqueEmail").call(["email": emailInputField.text]) { (result, error) in
if let error = error as NSError? {
if error.domain == FunctionsErrorDomain {
let code = FunctionsErrorCode(rawValue: error.code)
let message = error.localizedDescription
let details = error.userInfo[FunctionsErrorDetailsKey]
}
// ...
}
print(result?.data)
}
提前感谢您传递给的回调将产生HttpScalableResult或错误:
其中任何一个都可能为零,这就是为什么在使用它们的值之前必须同时检查它们。您现在正在检查错误
,但没有检查结果
,这意味着您得到了一个需要进一步检查nil的可选项
您应该改为使用以下中所述的模式:
请注意,如果在错误和成功的情况下都使用let,则会得到opcional(真/假),因为您正在打印可选值“?”
您的代码:
print(result?.data)
例如:
let value = false
print("this is a false value: \(value?)")
每次用“?”打印一个值时,首先会得到opcional,这是因为函数可能返回结果,也可能不返回结果,因为它可能返回错误;因此,它们必须是可选的,因此必须展开。因此,只需像打开错误对象一样打开结果对象即可。@bsod您是否可以将您的注释作为答案,以便有更多细节,这样我就可以在修复时将其标记为已回答?我已经这样做了,但是所有结果都返回为“无”。如果let确实对您有效,听起来像是
。
print(result?.data)
let value = false
print("this is a false value: \(value?)")