无法从Firebase获取价值 [英] Can't get value from firebase

查看:134
本文介绍了无法从Firebase获取价值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试从数据库中获取isBusy属性的值时,出现问题。一个使用的断点,它甚至不去指令,我为isBusy分配一个值,它分配空字符串,并去其他条件。

 如果docChild == 0 {
let selectedDoctor = Doctors.doc1
var isBusy = String()

databaseHandle = reference.child(selectedDoctor).child(dateChild ).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded,with:{(snapshot)in
isBusy = snapshot.value as!String
})

if isBusy ==false{
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue(true)
reference。 child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child (ReservationFields.lastname).setValue(lastNameLabel.text)
参考.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild) .child(ReservationFields.telephone).setValue(phoneLabel.text)


} else {
createAlert(title:Przepraszamy - termin jestzajęty,message:Proszęwybrać inny termin)

}

database 答案很简单。 Firebase数据库请求是异步的,因此,如果isBusy ==false语句在达到时,该值不会从数据库获取。改变你的代码:

pre $如果docChild == 0 {
let selectedDoctor = Doctors.doc1
var isBusy = String()

databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded,with:{(snapshot) in
isBusy = snapshot.value as!String
if isBusy ==false{
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields。 isBusy).setValue(true)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
reference.child (selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text)
reference.child(selectedDoctor).child(dateChild).child(timeChild).child( ReservationFields.pesel).setValue(peselLabel.text)
引用。 child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text)


} else {
createAlert(title :Przepraszamy - termin jestzajęty,消息:Proszęwybraćinny termin)

}
})

正如您所看到的,我只是将您的代码移动到处理程序中,所以在之后执行

I have a problem when i try to get value of isBusy property from my database. A used breakpoints and it even doesn't go to instruction where i assign a value for isBusy, it assigns empty string and goes to else condition.

if docChild == 0 {
        let selectedDoctor = Doctors.doc1
        var isBusy = String()

        databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded, with: { (snapshot) in
            isBusy = snapshot.value as! String
        })

        if isBusy == "false" {
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue("true")
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text)
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text)
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text)


        } else {
            createAlert(title: "Przepraszamy - termin jest zajęty", message: "Proszę wybrać inny termin")

        }

database

解决方案

The answer is fairly simply. Firebase Database requests are asynchronous, so that at the time you reach your if isBusy == "false" statement the value did not get fetched from the Database. Change your code accordingly:

if docChild == 0 {
    let selectedDoctor = Doctors.doc1
    var isBusy = String()

    databaseHandle = reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).observe(.childAdded, with: { (snapshot) in
        isBusy = snapshot.value as! String
        if isBusy == "false" {
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.isBusy).setValue("true")
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.firstname).setValue(firstNameLabel.text)
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.lastname).setValue(lastNameLabel.text)
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.pesel).setValue(peselLabel.text)
            reference.child(selectedDoctor).child(dateChild).child(timeChild).child(ReservationFields.telephone).setValue(phoneLabel.text)


        } else {
            createAlert(title: "Przepraszamy - termin jest zajęty", message: "Proszę wybrać inny termin")

        }
   })

As you can see I simply moved your code into the handler, so it gets executed after your value has been fetched.

这篇关于无法从Firebase获取价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆