即使在迅速的PromiseKit中完成异步操作之前,Promise也会得到满足

时间:2019-11-14 05:29:50

标签: swift firebase-realtime-database promisekit

  

Blockquote

我正在尝试从Firebase在表视图控制器中加载详细信息。以下是服务调用,甚至在观察所有事件之前就已经兑现了诺言。

import Firebase
import PromiseKit

class ContactsTableViewModal: NSObject {
    var contacts: [User] = []
    func getContacts() ->Promise<[User]> {
        return Promise {
            seal in
            Database.database().reference().child("users").observe(.childAdded, with: { [unowned self] (snapShot) in
                guard let contactsDict = snapShot.value as? [String: AnyObject]
                    else {
                        return seal.reject(UserError.inputValuesAreEmpty)
                }
                ///Observe the user one at a time from realtime database
                let user = User(userName: (contactsDict["username"] as! String), userEmail: contactsDict["email"] as! String)
                self.contacts.append(user)
                seal.fulfill(self.contacts)
            }) { (error) in
                seal.reject(error)
            }

        }
    }
}

///The following is calling method invoked from my tableview controller.
func fetchContacts() {
        self.contactsTableViewModal.getContacts().done { [unowned self] (users) in
            *//Promise is fulfilling immediately and returning nil users*
            self.contactsTableView.contacts = users
            DispatchQueue.main.async {
                self.contactsTableView.reloadData()
            }
        }.catch { (error) in
            print(error)
        }
    }

0 个答案:

没有答案