1. 程式人生 > >《React-Native系列》3、RN與native交互之Callback、Promise

《React-Native系列》3、RN與native交互之Callback、Promise

pan resolv str string callback 多次調用 modules 函數 等待

接著上一篇《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