gpt4 book ai didi

objective-c - 混淆 React Native Promises 的 Swift 类型注解

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:05 24 4
gpt4 key购买 nike

我正在尝试使用 React Native 并尝试编写一些通过蓝牙进行通信的 native 代码。我对为了使其工作而需要使用的类型注释感到困惑。有人可以解释为什么我必须在以下两个代码片段中包含“解析器”和“拒绝器”位吗?有没有办法在没有那些未使用的部分的情况下编写这个?

我的实现,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
)

我来自脚本领域,所以类型对我来说很陌生,但 React Native 拒绝识别我的 echoAsync 方法似乎太奇怪了,除非实现和桥接都包含 解析器拒绝器 位...

最佳答案

解析器和拒绝调用是让框架生成“ promise ”所必需的。可以将 Promise 视为将来可用的值的占位符。当 native 代码完成其工作并准备好将结果传递回 JavaScript 领域时,将调用解析器。 reject 在 native 端检测到错误时使用,并用于将错误从 native 端报告到 JavaScript 域。

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

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

  1. 回调(在 native 中它们具有 RCTResponseSenderBlock 类型)在被调用时,导致 JavaScript 函数使用传递的参数运行
  2. promises(具有 RCTPromiseResolveBlock 和 RCTPromiseRejectBlock 类型),这会导致您的成功处理程序在调用解析器时使用传递的参数运行,或者导致您的错误处理程序在调用拒绝时运行。

至于异步函数,您必须使用 promises。

有关 JavaScript promises checkout 的更多信息:

http://www.html5rocks.com/en/tutorials/es6/promises/

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

关于objective-c - 混淆 React Native Promises 的 Swift 类型注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33979832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com