Closed aoarashi1988 closed 5 years ago
找到问题了 我是用的 let userDetail = await storage.load({key: 'userDetail'}) 这种方式读取值的,而不是使用then,所以resolve是undefined
之前代码的promise用法不正确,会在下个版本中清理修复
之前代码的promise用法不正确,会在下个版本中清理修复
扒了一下源码,大约在storage.js 243行的位置
if(syncInBackground) { this.sync[key]({ id, syncParams }); return Promise.resolve(ret.rawData); }
这里,如果syncInBackground为true, 则传递给对应sync方法的参数只有id和syncParams, 没有resolve 和reject,所以如果直接在对应的sync函数里
const {resolve} = params
解构获取resolve,就会得到undefined
而如果不对resolve进行判空,直接调用resolve(value)
就会报错,并且导致外部await得不到期待的resolve,因为这个时候promise已经是rejected了
这个希望在文档中说明一下,sync中得到的params,并不一定总是会包含resolve和reject
@sunnylqm
试一下v1 beta版本, 直接在sync中返回值或者promise,不再调用resolve了
yarn add react-native-storage@beta
https://github.com/sunnylqm/react-native-storage/blob/v1/README.zh-CN.md#%E5%90%8C%E6%AD%A5%E8%BF%9C%E7%A8%8B%E6%95%B0%E6%8D%AE%E5%88%B7%E6%96%B0
@aoarashi1988
sync中设置,比如 userDetail(params){ let {resolve} = params resolve({}) } 然后在调用 storage.load({key: 'userDetail'}) 有时候就会出现resolve is not a function 的报错 这时候清除应用缓存又可以正常使用了 是什么原因造成的?又该怎么解决呢?