@discardableResult
  func timeout(on queue: DispatchQueue = .promises, _ interval: TimeInterval) -> Promise {
    let promise = Promise(objCPromise.__onQueue(queue, timeout: interval))
    // Keep Swift wrapper alive for chained promise until `ObjCPromise` counterpart is resolved.
    objCPromise.__pendingObjects?.add(promise)