Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么云函数返回&x2018;可选();有价值_Javascript_Swift_Firebase_Google Cloud Functions - Fatal编程技术网

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?)")