2016-07-06 17 views
1

firebase fetchProvidersForEmailを取得して、完了クロージャの外にブール値を設定しようとしていますが、要求が非同期であるためにどうしたらよいか分かりません。これは私が持っているものです。Firebaseが非同期呼び出しからブール値を返す

FIRAuth.auth()?.fetchProvidersForEmail(emailSignUpTextField.text!, completion:{(providers, error) in 
     if error != nil{ 
      print(error) 

      if error!.code == FIRAuthErrorCode.ErrorCodeInvalidEmail.rawValue{ 
       self.showErrorAlert("Invalid Email", msg: "Please input a valid email.") 
      } 
     } 
     else{ 
      //If there are no errors and there are providers, the email exists 
      if providers != nil{ 
       self.showErrorAlert("Email in Use", msg: "There is already an account created with that email.") 
      } 
      //The email does not exist 
      else{ 
       self.segueBool = true   
       print("it works") 
      } 
     } 
    }) 

self.segueBoolは、私はエラーがない場合にtrueに設定するために必要なものです。どんな助けもありがとう。

+0

このコードを別のスレッドで実行していますか?そうでない場合、完了ブロックは完了時に結果をキャッチする必要があります。この場合、非同期であるかどうかは関係ありません。もしあなたが望む結果を明示的にチェックするために 'if providers!= nil'の後にelse文を編集する必要があるかもしれません。 – cdslijngard

+0

あなたの問題は何ですか?このリクエストを同期して実行したいですか? – kelin

+0

はいこれは同期的に動作するようにしたいと思います。 – Pikachu

答えて

0

あなたはその真偽値を持つグローバル静的/ final変数、 を設定し、firebaseコールバックの前に、その変数にリスナーを作成することができます(これは、あなたが「同期」のように動作するのに役立ちます)

変数である。この方法変更を処理できるように設定します。

+0

サンプルへのリンクがありますか?ありがとう。 – Pikachu

+0

私は 'swift 'を知りませんが、これはあなたを助けるかもしれません:http://stackoverflow.com/questions/27371194/set-action-listener-programmatically-in-swift –

+0

ここでの最初の答えでは、 'Java':http://stackoverflow.com/questions/6270132/create-a-custom-event-in-java –