如何在 BFTask 之后解决 RCTPromiseResolveBlock [英] How to resolve RCTPromiseResolveBlock after BFTask
问题描述
我正在尝试通过来自 react-native 的 Bridge 实现 Amazon FireTV 的代码.我的目标是向远程播放器发送信号,然后解析 RCTPromiseResolveBlock 以便在我的 javascript 中等待该函数.
@objc func fling(_ options: NSDictionary, _ resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) ->空白 {let player = getDeviceFromUuid(uuid:uuid)//RemoteMediaPlayer 的实例//... 更多代码让 bftask = player?.setMediaSourceToURL(网址,元数据:元数据,自动播放:真,andPlayInBackground:false)bftask?.continue({ (task:BFTask) -> Void in如果 task.error != nil {reject()//<-- 这些是在转义闭包中捕获的非转义参数"} 别的 {解析()//<--}})
上面的代码抛出转义闭包捕获非转义参数
.我如何允许拒绝 &决心在关闭时可用?或者更广泛地说,我如何执行异步请求 setMediaSourceToURL
,等待它完成,然后解析 promise 块?
作为参考,BFTask 是
我期待着你,IOS 世界的巫师.
好的.只需将 @escaping
添加到参数中:
@objc func fling(_ options: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) ->空白 {...
I am trying to implement Amazon FireTV's code via a Bridge from react-native. My goal is to send a signal to the remote player, then resolve the RCTPromiseResolveBlock so that in my javascript I can await the function.
@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() // <--
}
})
The above code throws Escaping closure captures non-escaping parameter
. How do I allow reject & resolve to be available in the closure? Or more broadly, how do I execute the asynchronous request setMediaSourceToURL
, wait for it's completion, and then resolve the promise block?
For reference, BFTask is an artifact of https://github.com/facebookarchive/Bolts-ObjC . It's interface suggests the following:
I look to you, wizards of the IOS world.
Okay. Just had to add @escaping
to the arguments:
@objc func fling(_ options: NSDictionary, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
...
这篇关于如何在 BFTask 之后解决 RCTPromiseResolveBlock的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!