diff --git a/SessionUtilitiesKit/Database/GRDBStorage.swift b/SessionUtilitiesKit/Database/GRDBStorage.swift index bccd9cb6e..6d9f030dd 100644 --- a/SessionUtilitiesKit/Database/GRDBStorage.swift +++ b/SessionUtilitiesKit/Database/GRDBStorage.swift @@ -370,16 +370,28 @@ public extension GRDBStorage { } } - @discardableResult func write(updates: (Database) throws -> Promise) -> Promise { + @discardableResult func writeAsync(updates: @escaping (Database) throws -> Promise) -> Promise { guard isValid, let dbWriter: DatabaseWriter = dbWriter else { return Promise(error: StorageError.databaseInvalid) } - do { - return try dbWriter.write(updates) - } - catch { - return Promise(error: error) - } + let (promise, seal) = Promise.pending() + + dbWriter.asyncWrite( + { db in + try updates(db) + .done { result in seal.fulfill(result) } + .catch { error in seal.reject(error) } + .retainUntilComplete() + }, + completion: { _, result in + switch result { + case .failure(let error): seal.reject(error) + default: break + } + } + ) + + return promise } }