Как разрешить RCTPromiseResolveBlock после BFTask

Я пытаюсь реализовать код Amazon FireTV через мост от react-native. Моя цель - отправить сигнал удаленному игроку, а затем разрешить RCTPromiseResolveBlock, чтобы в моем javascript я мог дождаться функции.

@objc func fling(_ options: NSDictionary, _ resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) -> Void {
  let player = getDeviceFromUuid(uuid:uuid) // instance of RemoteMediaPlayer
  // ... more code
  let bftask = player?.setMediaSourceToURL(
    url,
    metaData:metaData,
    autoPlay:true,
    andPlayInBackground:false)

  bftask?.continue({ (task:BFTask) -> Void in
    if task.error != nil {
      reject() // <-- These are "non-escaping parameters captured in an escaping closure"
    } else {  
      resolve() // <-- 
    }
  })

Приведенный выше код бросает Escaping closure captures non-escaping parameter. Как сделать так, чтобы в закрытии было доступно отклонение и разрешение? Или, в более широком смысле, как мне выполнить асинхронный запросsetMediaSourceToURL, дождитесь его завершения, а затем разрешите блок обещаний?

Для справки, BFTask является артефактом https://github.com/facebookarchive/Bolts-ObjC. Его интерфейс предлагает следующее:

Я смотрю на вас, волшебники мира IOS.

1 ответ

Хорошо. Просто нужно было добавить@escaping к аргументам:

@objc func fling(_ options: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
Другие вопросы по тегам