【问题标题】:How to use PromiseKit with Firebase in Swift?如何在 Swift 中使用 PromiseKit 和 Firebase?
【发布时间】:2017-06-07 01:09:28
【问题描述】:

所以我导入 PromiseKit 然后尝试

 FIRDatabase.database().reference().child("somechild").removeValue().then  {
///// 
}

显然,这不起作用,我想知道如果可能的话,我还缺少什么让 Promise 与 Firebase 一起工作。我想要完成的是使用一个 catch 方法一次删除四个 Firebase 引用。

使用 nodeJs 我会很容易使用:

 Promise.all ([
someRef.remove(),
 someRef.remove(),
someRef.remove(),
someRef.remove()
]).then (function({

}).catch({
//handle error
})

有没有办法在 Swift 中实现这一点?

【问题讨论】:

  • 这个问题有点模糊,因为不清楚用例是什么;即对于您的案例,Promise 和 Firebase 之间的相关性是什么? Firebase 已经是异步的,因此有多种方法可以同步和异步删除子节点。在这里查看我的答案,因为它可能会有所帮助Delete Several Child Values
  • 我不知道我能做到这一点,这真的很有帮助!
  • 我在寻找类似的东西......我最终做的是一个使用泛型的较小的“PromiseKit”......比如 Promise 并且当快照被填充时,它会调用一个委托视图并填充信息...

标签: ios swift firebase promise firebase-realtime-database


【解决方案1】:

您可以使用fulfill 和reject 包装Firebase 函数

/// Get chat IDs of user conversations
///
/// - Returns: array of user chat IDs
private func getUserChatIds() -> Promise<[String]> {

    return Promise { fulfill, reject in
        let userChatIDsRef = Database.database().reference()
            .child(FireDatabasePaths.UserInfoPath.rawValue)
            .child(userID).child("chatIDs")

        userChatIDsRef.observe(.childAdded, with: { snapshot in

            if let chatIDdic = snapshot.value as? [String: AnyObject] {
                let keys = Array(chatIDdic.keys)
                fulfill(keys)
            } else {
                reject(FirebaseError.empty)
            }

        })
    }
}

【讨论】:

  • 函数开头的关键字“private”有什么不同?
  • @DarrowHartman 它不是必需的。这取决于您的功能可访问性级别。我定义这个函数的类要求函数是私有的
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多