weex的storage如何实现同步获取item

怎么使用storage的getItem()方法同步获取存储的数据,因为异步执行带来了很多的不便,特么是在封装函数,将取到的值作为返回值时
如以下函数:

const serverPath = async function serverPath() {
  const apiBase = '';
  const storage = weex.requireModule('storage');
   storage.getItem('apiBase', (e) => {
      apiBase = e.url;
    });
  return apiBase;
};

这只是一种形式,我只想在拿到本地数据,并返回。

想知道有没有什么比较好的方式来解决这个问题。我在iOS中发现有同步函数,但是发现SDK的实现方式都是使用block返回的。这样同样无法很好地处理返回值的问题

阅读 5.7k
5 个回答
/**
 * 获取缓存
 * @param key
 */
export function get_cache(key) {
    return new Promise(function (resolve) {
        try {
            storage.getItem(key, e => {
                if (e.result === 'success') {
                    resolve(e.data);
                    console.info(`获取缓存key='${key}'成功,result=`, e);
                } else {
                    resolve(false);
                    console.warn(`获取缓存key='${key}'失败,result=`, e);
                }
            });
        } catch (e) {
            console.error(`获取缓存key='${key}'出现异常! >>>` + e.toString());
            resolve(false);
        }
    });
}

使用时

get_cache('token')
.then(r => {
    
});

因为我这边的基本都把这些方法封装成了promise对象,所以实际业务操作中就只是组合连接这些promise操作

结合vuex使用应该可以满足你的需求。

一般是storage通过promise来做封装

  const p1 = new Promise(function (resolve) {
    storage.getItem(key, event => {
      resolve(event.data || '')
    })
  })
  Promise.all([p1]).then(function (result) {
    callback(result)
  }).catch(function(err){
    console.log('error', err)
  })

其实,在js层处理,始终都绕不过在调用需要从新修改老方法的问题。经过搜索一波,发现weex在native端提供了一个同步获取方法,可以直接获取返回值,而不是采用callBack的形式,这种方式能比较好的解决这类问题,不过需要在native端提供方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进