Хобрук: Ваш путь к мастерству в программировании

Обработка ошибок ObsetveSingleEvent

userRef.child(userId).observeSingleEvent(of: .value, with: { snapshot in
        //some codes
})

Это мой код для получения некоторых пользовательских данных из базы данных firebase. Мой вопрос: как получить ошибку, если есть ошибка (например, ошибка сети, время ожидания запроса, неизвестная ошибка)? ВObservSingleEvent нет блока завершения по сравнению с другими (setValue, updateValue и т. д.).

Я также пробовал:

userRef.child(userId).observeSingleEvent(of: .value, with: {(snapshot) in
    // print something
} , withCancel: {(error) in
    // print something
})

все еще не войдет внутрь с помощью Cancel.


Ответы:


1

Это то, что вы ищите?

userRef.child(userId).observeSingleEvent(of: .value, with: { (snapshot) in
        print("Worked")           
    }) { (error) in
        print("Didn't")        
    }

Вы также можете сделать еще одну проверку, если вы допустили ошибку в своем наблюдении.

if snapshot.value is NSNull{
     //snapshot is null
} else{
     //Not null
}
05.07.2018
  • Я уже попробовал это первое, и я печатаю ошибку, но ничего не происходит. Я также отлаживаю его, и он не вошел в часть с печатью. 05.07.2018
  • Ну ладно, так что если у вас есть что-то вроде моего отредактированного ответа - вы тоже получите. 05.07.2018
  • Если вы уверены, что ваш наблюдатель вызывается, и я предполагаю, что вы запускаете приложение без подключения к Интернету, вам придется сделать одну из двух вещей. Проверьте подключение: firebase.google.com/docs/database/ios/offline- возможности или сделайте это вручную и проверьте, подключен ли телефон к Интернету. 05.07.2018

  • 2

    Точно так же, как существует observe(of: with: _ withCancel:_). , есть также observeSingleEvent(of: _ with: _ withCancel: _) .

    Если код с блоком отмены не работает для вас, обновите свой вопрос, чтобы показать, что вы пробовали, и четко описать, какое поведение вы ожидали, и какое поведение вы получили вместо этого.

    05.07.2018
  • Привет, я видел ваш ответ здесь (заголовок stackoverflow.com/questions/41661137/), и я просто использовал вашу логику для этой моей проблемы. Но у меня есть вопрос для вашего ответа: почему, когда я запускаю этот код, он перестает быть подключенным, а затем подключается, даже если при запуске приложения уже есть подключение к Интернету? 05.07.2018
  • Флаг .info/connected не определяет наличие интернет-соединения. Он определяет, подключено ли приложение/клиент к серверам базы данных Firebase. Это занимает некоторое время после запуска приложения, поэтому обычно значение начинается с false, а затем становится true. Иногда он даже несколько раз переключается, прежде чем остановиться. 05.07.2018

  • 3

    Это то, что я сделал.

    let connectedRef = Database.database().reference(withPath: ".info/connected")
        connectedRef.observe(.value, with: { snapshot in
            if let connected = snapshot.value as? Bool, connected {
                print("Connected")
            } else {
                print("Not connected")
            }
        })
    

    Каждый раз, когда я что-то запрашиваю в/из базы данных, я делаю это, чтобы проверить, подключен ли я к базе данных. Если подключен, сделайте запрос. Если нет, подскажите предупреждение или что-то в этом роде. Но для внезапного отключения интернета, когда это запрос, у меня до сих пор нет решения.

    05.07.2018
    Новые материалы

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

    Разбор строк запроса в vue.js
    Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

    Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
    «Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..