如何在 Swift 中使用 PromiseKit 和 Firebase?
Posted
技术标签:
【中文标题】如何在 Swift 中使用 PromiseKit 和 Firebase?【英文标题】:How to use PromiseKit with Firebase in Swift? 【发布时间】: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您可以使用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 它不是必需的。这取决于您的功能可访问性级别。我定义这个函数的类要求函数是私有的以上是关于如何在 Swift 中使用 PromiseKit 和 Firebase?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Combine + Swift 复制 PromiseKit 风格的链式异步流
使用 PromiseKit 6 在 Swift 4.2 中缓存