オブザーバーSingleEvent関数がFirebaseで実行されていない

ゲイリー・テイト

Firebaseを使用してリアルタイムデータベースからデータを取得できるように関数を実行しようとしていますが、関数を実行するたびに; 私の関数のobserverSingleEvent部分は実行されません.printステートメントを挿入しようとしましたが、実行されておらず、フィールドが変数に読み取られていません.

func checkIfNewDay() -> Bool {
    print(self.currDate)
    var ref: FIRDatabaseReference!
    ref = FIRDatabase.database().reference()
    let userID = FIRAuth.auth()?.currentUser?.uid
    print("outside function")
    ref.child("user").child(userID!).child("dates").observeSingleEvent(of: .value, with: { (snapshot) in
        // Get user value
        print("inside function")
        let value = snapshot.value as? NSDictionary
        print("just to make sure its going inside the function.  Delete after")
        self.lastDate = value?["lastSaveDate"] as? String ?? "Date Invalid"
        self.newLastDate = String(self.lastDate)
        if self.newLastDate != "Date Invalid" {
            print(self.lastDate)
        } else {
            print("Error, date not able to be recieved from the database")
            self.catchGetDateError = true
            self.saveCurrentDate()
        }
    })



    if (!self.catchGetDateError) {
        print(self.newLastDate, "newLastDate")
        print(self.currentDate, "currentDate")

        if (self.newLastDate == self.currentDate) {
            print("Day has not moved on.")
            return false
        } else {
            print("Day has moved on!")
            return true
        }
    }
    return true
}

非常に長い関数で申し訳ありません - 書くのはかなり奇妙なものでした。

ヴラド・プリチェフ

コメントから、私は理解したと思います、あなたは何を望んでいますか。

同期のようにこの結果を得るには、エスケープを実装する必要があります。このような:

func checkIfNewDay(completion: @escaping (_ isNew: Bool) -> Void) {
    print(self.currDate)
    var ref: FIRDatabaseReference!
    ref = FIRDatabase.database().reference()
    let userID = FIRAuth.auth()?.currentUser?.uid
    print("outside function")
    ref.child("user").child(userID!).child("dates").observeSingleEvent(of: .value, with: { (snapshot) in
        // Get user value
        print("inside function")
        let value = snapshot.value as? NSDictionary
        print("just to make sure its going inside the function.  Delete after")
        self.lastDate = value?["lastSaveDate"] as? String ?? "Date Invalid"
        self.newLastDate = String(self.lastDate)
        if self.newLastDate != "Date Invalid" {
            print(self.lastDate)
            if (self.newLastDate == self.currentDate) {
                print("Day has not moved on.")
                completion(false)
            } else {
                print("Day has moved on!")
                completion(true)
            }
        } else {
            print("Error, date not able to be recieved from the database")
            self.catchGetDateError = true
            self.saveCurrentDate()
            completion(false)
        }
    })
}

これで、func を使用できます。

checkIfNewDay(completion: { isNew in
     // do whatever you want. isNew will have info, that you need.
})

.observe 関数は非同期で動作するため、これが必要です。考え方は理解できるはずです。

それが役に立てば幸い。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オブザーバーの実行中にtextViewが更新されない

分類Dev

SQLユーザー定義関数が実行されない

分類Dev

RxJS:外部オブザーバブルにサブスクリプションが残っていない場合でも、遅延された内部オブザーバブルは実行されます

分類Dev

関数コールバックが実行されない

分類Dev

関数内で実行されていないforループ

分類Dev

オブザーバブルがその値を変更しているときはいつでもオブザーバーは実行されないようです

分類Dev

PHPがApacheサーバーで実行されていない

分類Dev

ActionCreatorでコールバック関数が正しく実行されない

分類Dev

rxcpp-オブザーバブルが値を出力するときに、すべてのオブザーバーのon_next関数が呼び出されないのはなぜですか

分類Dev

Azure関数がローカルで実行されない

分類Dev

JavaScriptがヘッダー関数で実行されない

分類Dev

ビューが変更されるまでFirebase関数が実行されない

分類Dev

監視可能なオブジェクトが新しいスレッドとして実行されたときにオブザーバーに通知されないのはなぜですか?

分類Dev

計算されたオブザーバブルが変更されるたびに関数を実行する

分類Dev

ハイパーバイザーが実行されていないため、VMの電源をオンにできません。これはvCenterサーバーで実行されているVMです。

分類Dev

現在のユーザーに対して関数が2回実行されないようにするにはどうすればよいですか?

分類Dev

このコードでコールバック関数が実行されないのはなぜですか?

分類Dev

promiseやasyncawaitをサポートしていない古いブラウザでコールバックが実行されるのを待つ方法は?

分類Dev

jQuery関数が新しいパラメーターで実行されない

分類Dev

Npm Startを実行しても、ブラウザでReactページがライブで変更されない

分類Dev

まだ実行されていない関数が原因でエラーが発生しました

分類Dev

実行されていない関数のコード

分類Dev

LiveDataオブザーバーが呼び出されない

分類Dev

匿名関数がGoルーチンで実行されていないようです

分類Dev

コールバック関数が予期せず実行されない

分類Dev

onload関数内で実行されていないJavascriptコード

分類Dev

Swift:子のオブザーバーが削除された場合にFirebase認証オブザーバーが呼び出されない

分類Dev

RxJSでは、マップが内部マップされたオブザーバブルを実行していません

分類Dev

キューに入れられたジョブは、スーパーバイザーが実行されていなくても処理されます

Related 関連記事

  1. 1

    オブザーバーの実行中にtextViewが更新されない

  2. 2

    SQLユーザー定義関数が実行されない

  3. 3

    RxJS:外部オブザーバブルにサブスクリプションが残っていない場合でも、遅延された内部オブザーバブルは実行されます

  4. 4

    関数コールバックが実行されない

  5. 5

    関数内で実行されていないforループ

  6. 6

    オブザーバブルがその値を変更しているときはいつでもオブザーバーは実行されないようです

  7. 7

    PHPがApacheサーバーで実行されていない

  8. 8

    ActionCreatorでコールバック関数が正しく実行されない

  9. 9

    rxcpp-オブザーバブルが値を出力するときに、すべてのオブザーバーのon_next関数が呼び出されないのはなぜですか

  10. 10

    Azure関数がローカルで実行されない

  11. 11

    JavaScriptがヘッダー関数で実行されない

  12. 12

    ビューが変更されるまでFirebase関数が実行されない

  13. 13

    監視可能なオブジェクトが新しいスレッドとして実行されたときにオブザーバーに通知されないのはなぜですか?

  14. 14

    計算されたオブザーバブルが変更されるたびに関数を実行する

  15. 15

    ハイパーバイザーが実行されていないため、VMの電源をオンにできません。これはvCenterサーバーで実行されているVMです。

  16. 16

    現在のユーザーに対して関数が2回実行されないようにするにはどうすればよいですか?

  17. 17

    このコードでコールバック関数が実行されないのはなぜですか?

  18. 18

    promiseやasyncawaitをサポートしていない古いブラウザでコールバックが実行されるのを待つ方法は?

  19. 19

    jQuery関数が新しいパラメーターで実行されない

  20. 20

    Npm Startを実行しても、ブラウザでReactページがライブで変更されない

  21. 21

    まだ実行されていない関数が原因でエラーが発生しました

  22. 22

    実行されていない関数のコード

  23. 23

    LiveDataオブザーバーが呼び出されない

  24. 24

    匿名関数がGoルーチンで実行されていないようです

  25. 25

    コールバック関数が予期せず実行されない

  26. 26

    onload関数内で実行されていないJavascriptコード

  27. 27

    Swift:子のオブザーバーが削除された場合にFirebase認証オブザーバーが呼び出されない

  28. 28

    RxJSでは、マップが内部マップされたオブザーバブルを実行していません

  29. 29

    キューに入れられたジョブは、スーパーバイザーが実行されていなくても処理されます

ホットタグ

アーカイブ