Как разрешить 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 {
...