如何在 BFTask 之后解决 RCTPromiseResolveBlock [英] How to resolve RCTPromiseResolveBlock after BFTask

查看:85
本文介绍了如何在 BFTask 之后解决 RCTPromiseResolveBlock的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过来自 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆