uni-app 编译到钉钉小程序时调用uni.getStorageSync接口获取未存储过的key会报错"查无此key"

uni-app 编译到钉钉小程序时调用uni.getStorageSync接口获取未存储过的key会报错"查无此key"

开发环境 版本号 项目创建方式
Windows win10 CLI

示例代码:

function getStorageSync (key) {  
  const result = my.getStorageSync({  
    key  
  });  
  // 支付宝平台会返回一个 success 值,但是目前测试的结果这个始终是 true。当没有存储数据的时候,其它平台会返回空字符串。  
  return result.data !== null ? result.data : ''  
}

希望可以增加try…catch捕获相应的报错,避免影响前端渲染:

function getStorageSync (key) {  
  let result = { data: null }  
  try {  
    result = my.getStorageSync({  
      key  
    })  
  } catch (error) {  
  }  
  // 支付宝平台会返回一个 success 值,但是目前测试的结果这个始终是 true。当没有存储数据的时候,其它平台会返回空字符串。  
  return result.data !== null ? result.data : ''  
}

操作步骤:

uni.getStorageSync({key:"test"})

预期结果:

返回null  

实际结果:

报错,查无此key

更多关于uni-app 编译到钉钉小程序时调用uni.getStorageSync接口获取未存储过的key会报错"查无此key"的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 编译到钉钉小程序时调用uni.getStorageSync接口获取未存储过的key会报错"查无此key"的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,uni.getStorageSync接口在不同小程序平台的行为确实存在差异。钉钉小程序(基于支付宝小程序运行时)在调用my.getStorageSync获取未存储的key时会抛出"查无此key"的错误,这与微信小程序等平台返回空值的行为不同。

你提供的try-catch封装方案是正确的处理方式。不过可以进一步优化,确保在所有情况下都返回一致的值:

function getStorageSync(key) {
  try {
    const result = my.getStorageSync({ key });
    // 钉钉小程序成功时返回 { data: value } 结构
    return result.data !== undefined ? result.data : '';
  } catch (error) {
    // 捕获"查无此key"等错误,返回空字符串
    return '';
  }
}

对于uni-app项目,建议在条件编译中统一处理这种平台差异:

// #ifdef MP-DD
function getStorageSync(key) {
  try {
    const result = my.getStorageSync({ key });
    return result.data !== undefined ? result.data : '';
  } catch {
    return '';
  }
}
// #endif

// #ifndef MP-DD
// 其他平台使用原生uni.getStorageSync
// #endif
回到顶部