uni.setStorageSync和uni.getStorageSync区别
时间: 2023-12-10 14:31:43 浏览: 197
uni.setStorageSync和uni.getStorageSync都是uni-app中用于本地存储的API,它们的区别在于:
- uni.setStorageSync用于将数据存储到本地缓存中,可以通过key-value的形式进行存储,其中key为字符串类型,value可以是任意类型的数据。该方法是同步的,即在数据存储完成之前会一直阻塞线程。
- uni.getStorageSync用于从本地缓存中获取数据,需要传入一个key值,返回对应的value值。如果该key不存在,则返回null。该方法也是同步的。
相关问题
改一下这段代码save() { let that = this; var userData = { nickName: that.nickName, //用户昵称 avatarUrl:that.imagePath, userId: uni.getStorageSync('userId'), gender: that.index, //性别 // phone:that.phone, } uni.uploadFile({ url: that.serverUrl + '/login/update', //仅为示例,非真实的接口地址 filePath:userData, name: userData, success: (uploadFileRes) => { console.log(uploadFileRes.data) let res = JSON.parse(uploadFileRes.data); let data = res.data; let response = JSON.parse(data.response); uni.setStorageSync('nickName', that.nickName); uni.setStorageSync('gender', that.index); uni.setStorageSync('avatarUrl', userData.imagePath); // uni.setStorageSync('phone', that.phone); uni.showToast({ title: '保存成功', icon: 'success', });
改动如下:
```
save() {
let that = this;
var userData = {
nickName: that.nickName, //用户昵称
avatarUrl: that.imagePath,
userId: uni.getStorageSync('userId'),
gender: that.index, //性别
// phone:that.phone,
}
uni.uploadFile({
url: that.serverUrl + '/login/update', //仅为示例,非真实的接口地址
filePath: that.imagePath, // 上传的文件路径
name: 'file', // 上传的文件名,自己定义,后端会用这个字段获取文件
formData: userData, // 上传的其他参数
success: (uploadFileRes) => {
console.log(uploadFileRes.data)
let res = JSON.parse(uploadFileRes.data);
let data = res.data;
let response = JSON.parse(data.response);
uni.setStorageSync('nickName', that.nickName);
uni.setStorageSync('gender', that.index);
uni.setStorageSync('avatarUrl', that.imagePath);
// uni.setStorageSync('phone', that.phone);
uni.showToast({
title: '保存成功',
icon: 'success',
});
}
});
}
```
主要改动如下:
1. `filePath` 参数应该是需要上传的文件路径,应该传入 `that.imagePath`,而不是 `userData`。
2. `name` 参数应该是上传的文件名,后端会用这个字段获取文件,改为字符串 `'file'`。
3. `formData` 参数应该是上传的其他参数,改为 `userData`。
4. 上传成功后,应该保存的是 `that.imagePath`,而不是 `userData.imagePath`。
onLoad(async () => { if (uni.getStorageSync("WxAuthorization")) return; uni.login({ success: async (res) => { const data = await uni.$u.api.login.authLogin({ loginCode: res.code }); uni.setStorageSync("WxAuthorization", "Bearer " + data.token); uni.setStorageSync("loginStatus", data.loginStatus); }, }); getSwiperPic(); getNotice(); getTools(); }); 优化当前代码让他按顺序执行
为了让这段代码按顺序执行,我们可以将获取登录凭证和获取数据的操作放在同一个async函数中,并且使用await来等待前一个操作完成后再执行后面的操作。同时,我们需要将获取数据的三个函数也改为支持async/await的异步函数。
下面是优化后的代码:
```javascript
onLoad(async () => {
if (uni.getStorageSync("WxAuthorization")) return;
try {
const res = await uni.login();
const data = await uni.$u.api.login.authLogin({ loginCode: res.code });
uni.setStorageSync("WxAuthorization", "Bearer " + data.token);
uni.setStorageSync("loginStatus", data.loginStatus);
await getSwiperPic();
await getNotice();
await getTools();
} catch (error) {
console.error(error);
}
});
async function getSwiperPic() {
// 获取轮播图数据
}
async function getNotice() {
// 获取公告数据
}
async function getTools() {
// 获取工具数据
}
```
这样,代码就会按照顺序执行,并且在执行过程中如果出现异常也能够正确地处理。
阅读全文