接着上一篇《React-Native系列》RN与native交互与数据传递,我们接下来研究另外的两种RN与Native交互的机制

一、Callback机制

首先Calllback是异步的,RN端调用Native端,Native会callback,但是时机是不确定的,如果多次调用的话,会存在问题。

Naive端是无法主动通过回调函数向RN端发送消息的。

具体实现代码如下:

Native端暴露好接口

  1. @ReactMethod
  2. public void measureLayout(Callback errorCallback,
  3. Callback successCallback){
  4. try {
  5. successCallback.invoke(100, 100, 200, 200);//调用回调函数,返回结果
  6. } catch (IllegalViewOperationException e) {
  7. errorCallback.invoke(e.getMessage());
  8. }
  9. }

在RN端:

  1. <Text style={{ fontSize: 25 }} onPress={this.CallAndroid_callback} >调用原生方法_使用_回调函数</Text>
  2. CallAndroid_callback = () => {
  3. NativeModules.MyNativeModule.measureLayout(
  4. (msg) => {
  5. console.log(msg);
  6. },
  7. (x, y, width, height) => {
  8. console.log(x + '坐标,' + y + '坐标,' + width + '宽,' + height + '高');
  9. }
  10. );
  11. }

二、promise机制

关于ES6中Promise的用法可以参考:http://www.cnblogs.com/lvdabao/p/5320705.html

Promise 的状态
一个 Promise 的当前状态必须为以下三种状态中的一种:等待态(Pending)、完成态(Fulfilled)和拒绝态(Rejected)。

等待态(Pending)

处于等待态时,promise 需满足以下条件:

  • 可以迁移至完成态或拒绝态
 
完成态(Fulfilled)
处于完成态时,promise 需满足以下条件:
  • 不能迁移至其他任何状态
  • 必须拥有一个不可变的终值

拒绝态(Rejected)

处于拒绝态时,promise 需满足以下条件:

  • 不能迁移至其他任何状态
  • 必须拥有一个不可变的据因

在Native侧,暴露接口:

  1. @ReactMethod
  2. public void rnCallNative_promise(String msg, Promise promise) {
  3. try {
  4. //业务逻辑处理
  5. Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();
  6. String componentName = getCurrentActivity().getComponentName().toString();
  7. promise.resolve(componentName);
  8. }catch (Exception e){
  9. promise.reject("100",e.getMessage());//promise 失败
  10. }
  11. }

在RN侧:

  1. <Text style={{ fontSize: 25 }} onPress={this.CallAndroid_promise} >调用原生方法_使用_Promise</Text>
  2. CallAndroid_promise = () => {
  3. NativeModules.MyNativeModule.rnCallNative_promise('rn调用原生模块的方法-成功啦').then(
  4. (msg) => {
  5. console.log('promise成功:'+msg);
  6. }
  7. ).catch(
  8. (err) => {
  9. console.log(err);
  10. }
  11. );
  12. }
  13. }

引用原文:http://blog.csdn.net/codetomylaw/article/details/51927126

参考文章: React界面调用原生界面

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

《React-Native系列》3、RN与native交互之Callback、Promise的更多相关文章

  1. 《React-Native系列》RN与native交互与数据传递

    RN怎么与native交互的呢? 下面我们通过一个简单的Demo来实现:RN页面调起Native页面,Native页面选择电话本数据,将数据回传给RN展示. 首先是 Native侧 1.MainAct ...

  2. C++的性能C#的产能?! - .Net Native 系列五:.Net Native与反射

    此系列系小九的学堂原创翻译,翻译自微软官方开发向导,一共分为六个主题.本文是第五个主题:.Net Native与反射. 向导文链接:<C++的性能C#的产能?! - .Net Native 系列 ...

  3. 【REACT NATIVE 系列教程之十二】REACT NATIVE(JS/ES)与IOS(OBJECT-C)交互通信

    http://blog.csdn.net/xiaominghimi/article/details/51586492 一用到跨平台的引擎必然要有引擎与各平台原生进行交互通信的需要.那么Himi先讲解R ...

  4. C++的性能C#的产能?! - .Net Native 系列四:性能测试方法(PerfView)

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  5. C++的性能C#的产能?! - .Net Native 系列《三》:.NET Native部署测试方案及样例

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  6. C++的性能C#的产能?! - .Net Native 系列向导

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  7. C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  8. C++的性能C#的产能?! - .Net Native 系列《一》:.NET Native安装和配置

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  9. 不可或缺 Windows Native 系列文章索引

    [源码下载] 不可或缺 Windows Native 系列文章索引 作者:webabcd 1.不可或缺 Windows Native (1) - C 语言: hello c 介绍不可或缺 Window ...

随机推荐

  1. RPM ,DPKG ,YUM ,APT-GET

    http://blog.csdn.net/li740207611/article/details/50801462

  2. IE强制不使用兼容模式

    [caption id="attachment_471" align="alignnone" width="431"] 强制不使用兼容模式[ ...

  3. fineReport---sql

    一.开窗函数-逐层平均 在创建数据集时用sql的开窗排名函数[AVG(字段) over(PARTITION BY 分组字段 order by 逐层字段)]处理,然后进行直接调用. 详细说明 二.开窗函 ...

  4. IE数组排序问题的处理

    有一哥们在微信开发中,到生成签名这抓狂了一天 最后发现微信调试工具在IE和chrome下对字符的排序竟然不同. 嗯,这个问题引起了我的关注,于是根据微信工具里的对象数组格式,撸了几句代码调试了一下,发 ...

  5. mysql 中事件

    # 创建存储过程 /* delimiter // create procedure test() begin update test SET name = date_format(now(),'%Y- ...

  6. Powered by Flink

    Apache Flink: Powered by Flink https://flink.apache.org/poweredby.html Powered by Flink Apache Flink ...

  7. Druid对数据库密码加密的坑

    背景: 在对已有项目搭建本地环境,修改了本地ip端口和数据库帐号密码(使用了明文). 然后项目一直跑不起来,还抛出各种异常,经过分析发现主要错在这里:druid java.lang.IllegalAr ...

  8. caffe自定义layer

    caffe自带layers: http://caffe.berkeleyvision.org/tutorial/layers.html Layers: Image Data - read raw im ...

  9. .tomcat 管理 给tomcat设置用户名和密码登录

    如果点击红色框框 出现403以下错误 看这个帖子可以解决 tomcat访问管理页面出现:403 Access Denied 解决方法 tomca管理 测试功能,生产环境不要用. Tomcat管理功能用 ...

  10. Linux基础整理 + 注释

    1.Linux的常用命令: ls 显示当前文件夹目录 ll -->详细信息 ls -a 显示所有文件 ls -lhSr w 查看登录的帐号,还可以查看cpu负载情况,who am i ,who ...