React Native Promises令人困惑的Swift类型注释

斯宾塞·阿尔杰

我正在玩React Native,并尝试编写一些通过蓝牙进行通信的本机代码。为了使它能够工作,我对类型注释感到困惑。有人可以解释一下为什么下面两个代码段中必须有“ resolver”和“ rejecter”位吗?没有这些未使用的部分,有没有办法写这个?

我的实现MyAsyncModule.swift

@objc(MyAsyncModule)
class MyAsyncModule: NSObject {

  @objc func echoAsync(
    input: NSNumber,
    resolver resolve: RCTPromiseResolveBlock,
    rejecter reject: RCTPromiseRejectBlock
  ) -> Void {

    resolve(input)

  }

}

从我的桥文件中 MyAsyncModuleBridge.m

RCT_EXTERN_METHOD(echoAsync:
                 (nonnull NSNumber *)input
                  resolver:(RCTPromiseResolveBlock *)resolve
                  rejecter:(RCTPromiseRejectBlock *)reject
                 )

我来自脚本领域,所以类型对我来说是陌生的,但是echoAsync除非实现和桥都包括resolverrejecter位,否则React Native拒绝识别我的方法似乎太奇怪了...

鲍勃9630

需要解析程序和拒绝调用,以使框架生成“承诺”。可以将诺言视为将来会提供的价值的占位符。当本机代码完成工作并准备好将结果传递回JavaScript领域时,将调用解析程序。当本机端检测到错误时,将使用reject,并用于将错误从本机报告到JavaScript。

更深入一点,当您使用JavaScript调用本机函数时,它不会暂停,并且像正常的函数调用一样等待本机完成。相反,它只是继续执行下一行代码(注意React-Native如何阻止您为导出的函数设置返回值,这意味着它们明确确保不要尝试等待返回值)。

那么,本机代码如何将结果报告回JavaScript?有两种选择

  1. 回调(本机中的回调类型为RCTResponseSenderBlock)在调用时导致JavaScript函数与传递的参数一起运行
  2. promise(类型为RCTPromiseResolveBlock和RCTPromiseRejectBlock)会导致您成功的处理程序在调用resolver时使用传递的参数运行,或者在错误处理程序在调用reject时运行。

至于异步功能,您必须使用promise。

有关JavaScript承诺结帐的更多信息:

http://www.html5rocks.com/zh-CN/tutorials/es6/promises/

https://facebook.github.io/react-native/docs/native-modules-ios.html#promises

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

令人困惑的React Native语法

来自分类Dev

Promises 和 React Native 协助

来自分类Dev

处理Promises React Native的多个响应

来自分类Dev

在React Native(iOS)中支持动态类型

来自分类Dev

不变违规:元素类型无效-React Native

来自分类Dev

React Native中onLayout事件的TypeScript类型?

来自分类Dev

React Native扩展NativeModules TypeScript类型

来自分类Dev

React Native useContext错误:元素类型无效

来自分类Dev

React-native (expo) - 无效类型

来自分类Dev

不变违规:元素类型无效:React Native

来自分类Dev

不变违规:元素类型无效 - React Native

来自分类Dev

将 swift 块传递给 React Native

来自分类Dev

React Native Swift UI 组件框架大小

来自分类Dev

(警告:React.createElement:类型无效)React Native Error

来自分类Dev

Tsql AND(&)令人困惑

来自分类Dev

令人困惑的任务

来自分类Dev

Tsql AND(&)令人困惑

来自分类Dev

令人困惑的作业

来自分类Dev

React Native中每种用户类型的差异抽屉导航器

来自分类Dev

React-Native类型无效-预期为字符串

来自分类Dev

React Native中TextInput的onChange事件的TypeScript类型

来自分类Dev

类型错误:undefined不是对象React-Native

来自分类Dev

React Native仍然以错误定义的类型(TypeScript)运行

来自分类Dev

React Native TypeSrcript函数返回JSX.Element类型

来自分类Dev

React Native:失败的道具类型:道具 businessPhoneNumberChanged 被标记为必需

来自分类Dev

不变违规:元素类型无效 React-Native

来自分类Dev

如何通过 Typescript for Flow 导入 React-Native 类型?

来自分类Dev

如何将Swift Promise桥接到React Native

来自分类Dev

Xcode 10.2 iOS Swift(+ React Native)项目编译错误

Related 相关文章

热门标签

归档