在 react-native 中實現 Promise 和 AsyncStorage
問題
我擁有的
2個功能-
-
getListInfo – 這裡我檢查一個物件是否存在,如果不存在,建立它,然後返回它。
-
getInitialState – react native 的預設函式。
我想要達到的目標
嘗試從 getInitialState 呼叫 getListInfo,並最終填充列表檢視。
但是,發生了什麼——
甚至在返回值 obj 之前,整個頁面的程式碼就已被執行。 所以,問題是,列表檢視正在獲取未定義的資料。
我知道的
使用promise來解決問題。 但是,方法不對。
實際程式碼 –
getListInfo : function() { AsyncStorage.getItem('listobject').then((obj) => { if(obj == undefined) { var obj1 ={}; obj1.data ={}; obj1.data.isdirty = true; console.log("obj1 = "+ JSON.stringify(obj1)); AsyncStorage.setItem('listobject',obj1); obj = AsyncStorage.getItem('listobject'); console.log("obj = "+ JSON.stringify(obj)); } if(obj.data.isdirty) { obj.data.isdirty = false; AsyncStorage.setItem('listobject',JSON.stringify(obj)); return AsyncStorage.getItem('listobject'); }}).done();}, getInitialState: function() { applistglobal = this.checkLocalStore(); var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); return { dataSource: ds.cloneWithRows(this._genRows({})), }; },render: function() { /* BLAH BLAH BLAH */}
Promise 部分程式碼(getInitialState 函式)- 我使用了 Promise,但是,即使函式呼叫也失敗了。 所以,請忽略這部分程式碼並評估上面的程式碼。
getInitialState: function() { var promise = new Promise(function (resolve, reject) { resolve(this.getListInfo()); }); promise.then((listobject) => { console.log("getInitialState listobject "+listobject); }) promise.catch((error) => { console.log("ERROR"+error); }) var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2}); return { dataSource: ds.cloneWithRows(this._genRows({})), }; },
解決方案
您設定它的方式不是通常的做法。即在 getInitialState 中發出請求。 當 promise 完成時返回空狀態和 setState。 您可以在 componentWillMount 或 componentDidMount 中啟動請求。 在 react-native 網站上 檢視這個示例 https://www.chaindev.cn/34094474-implementing-promises-and-asyncstorage-in-react-native/。 他們雖然使用 ES7 非同步結構。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016198/viewspace-2885637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Promise實現Promise
- 淺談Generator和Promise原理及實現Promise
- Promise核心實現Promise
- 學習Promise && 簡易實現PromisePromise
- 面試高頻點-Promise解析和實現面試Promise
- 在 React-Native 中持久化 redux 資料React持久化Redux
- 實現一個promisePromise
- Promise 簡單實現Promise
- 實現自己的promisePromise
- Promise原始碼實現Promise原始碼
- promise實現過程Promise
- promise基本實現思路Promise
- Promise 程式碼實現Promise
- Promise 方法的實現Promise
- jsonp 的原理和採用 Promise API 的實現JSONPromiseAPI
- js中的promise和thenJSPromise
- Promise進階——如何實現一個Promise庫Promise
- 簡單版Promise實現Promise
- 實現promise.all方法Promise
- Promise的實現(step by step)Promise
- Promise原理探究及實現Promise
- Es6 Promise 實現Promise
- Promise的實現及解析Promise
- promise的模擬實現Promise
- Promise 原始碼:實現一個簡單的 PromisePromise原始碼
- Promise的祕密(Promise原理解析以及實現)Promise
- 實現一個Promise(基於Promise/A+規範)Promise
- Promise原理講解 && 實現一個Promise物件 (遵循Promise/A+規範)Promise物件
- 在後端中如何實現冪等和去重?後端
- 在 GPUImage 中實現 ColorConversionGPUUI
- 在 Zig 中實現介面
- 手寫實現滿足 Promise/A+ 規範的 PromisePromise
- 實現一個完美符合Promise/A+規範的PromisePromise
- Promise的原始碼實現(完美符合Promise/A+規範)Promise原始碼
- 按照 Promise/A+ 規範逐行註釋並實現 PromisePromise
- 記一次Promise在api介面合併中的實踐PromiseAPI
- Promise實現原理(附原始碼)Promise原始碼
- 實現一個完整的promisePromise