首页 > 解决方案 > Firebase 在调用下一个方法之前没有完成

问题描述

我正在使用以下内容调用 firebase 数据库:

    let myRef1 = Database.database().reference(withPath: "/tests/\ . 
     (myTest)")
    print(myTest)
    myRef1.observe(.value, with: {
        snapshot in
        print(snapshot)
        var newItems: [qItem] = []
        for item in snapshot.children {
            let mItem = qItem(snapshot: item as! DataSnapshot)
            newItems.append(mItem)
            print(newItems)
        }
        self.myArray = newItems.shuffled()
        print(self.myArray)
    })

    loadNext()
    ...

然而,它在移动到下一个方法调用之前永远不会完成完成处理程序,这取决于由此产生的结果。

尝试将其设为单独的方法等,但似乎没有任何效果。

标签: swiftfirebasefirebase-realtime-database

解决方案


您需要在 中添加方法才能在检索数据后调用它loadNext()observe当您检索数据时,它是异步发生的,这意味着编译器不会等到所有数据都被检索到,它会loadNext()先调用该方法,然后在完成检索数据后执行print(newItems),因此您需要执行以下操作:

    myRef1.observe(.value, with: {
    snapshot in
    print(snapshot)
    var newItems: [qItem] = []
    for item in snapshot.children {
        let mItem = qItem(snapshot: item as! DataSnapshot)
        newItems.append(mItem)
        print(newItems)
        loadNext()
    }
    self.myArray = newItems.shuffled()
    print(self.myArray)
})

推荐阅读