React native 与Android原生交互方式(三)

前言

上一篇文章介绍了使用callback的方式来进行React native与Android之间的通信,本文将介绍第三种通信方式,即promise的方式。

Promise方式

看了上面的回调函数的使用,大家有没有发现上面的写法还有有一些繁琐的?OK , 当然原生模块还可以支持使用Promise,这样可以简化我们编写的代码。如果大家搭配使用ES2016标准的async/await的语法使用会更加好。如果被桥接的原生方法的最后一个参数是一个Promise对象,那么该JS方法会返回一个Promise对象。下面我们使用Promise对象来进行重构之前的回调函数方法。我们来看一下代码是怎么样实现的。本文的代码是基于上一篇文章中的项目代码示例。

1、原生模块中首先在MyModule类中添加被Rn调用的方法,代码如下:

   @ReactMethod
    public void callNativeByPromise(String msg, Promise promise){
        Log.e("wfunny","called by promise");

        // 1.处理业务逻辑...
        String result = "处理结果:" + msg;
        // 2.回调RN,即将处理结果返回给RN
        promise.resolve(result);
    } 

2、React native端在index.android.js中添加调用原生的方法代码,本例子是通过点击文本触发的,代码如下:

render(){
    return (
      
        
            当你点我的时候会调用原生方法,原生方法延迟3s后会向前端发送事件。
            前端一直在监听该事件,如果收到,则给出alert提示! send 方式
        
        
           callback方式 交互方式!!!!
        
        
           promise方式 交互方式!!!!
        
        
            {this.state.content}
        

      

    );

  }

callNativePromise(msg){
      console.log("js called by promise");
      NativeModules.MyModule.callNativeByPromise(msg).then(
        (result) => {
          this.setState({content:result});
        }
      ).catch((error) =>{
        console.log(error);
      })
  }

从以上代码可以看出,React native 中通过callNativePromise 方法调用原生模块中的callNativeByPromise方法,该方法最后一个参数有一个Promise对象,那么JS调用Native模块的方法就会返回一个Promise对象,咱们用这个对象来将原生处理完毕以后的结果给JS端。

三种交互方式的比较

1、RCTDeviceEventEmitter发送事件方式

优点:可任意时刻传递,Native主导控制。
缺点:要添加注册监听

2、Callback回调方式

优点:JS调用一次,Native返回一次,
缺点:CallBack为异步操作,返回时机不确定

3、Promise方式

优点:JS调用一次,Native返回一次
缺点:每次使用需要JS调用一次

至于使用哪种方式根据自己的业务需求来决定,个人觉得相对而言 发送事件的方式缺点相对小一些。

上一篇:React native 与Android原生交互方式(二)

你可能感兴趣的:(React native 与Android原生交互方式(三))