public func wrap<Value>(
  on queue: DispatchQueue = .promises,
  _ work: @escaping (@escaping (Error?, Value) -> Void) throws -> Void
) -> Promise<Value> {
  return Promise<Value>(on: queue) { fulfill, reject in