Как разрешить RCTPromiseResolveBlock после BFTask - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь реализовать код Amazon FireTV через Bridge от реактивной системы. Моя цель - отправить сигнал удаленному плееру, а затем разрешить 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 , Его интерфейс предлагает следующее:

BFTask Interface options

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

1 Ответ

0 голосов
/ 06 марта 2020

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

@objc func fling(_ options: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
...