关于uni-app 中 使用async + await 将异步请求同步化

hykeda6年前Vue1917

这段时间在使用uni-app开发小程序,希望在页面加载时,获取地区数据,然后展示到页面上。

一开始写在了onLoad方法上,发现页面加载时,用异步uni.request方法获取数据,当页面加载完后,异步方法还未获取到数据,赋值给变量的时候是空值。

代码片段:

onLoad() {
	uni.request({
		url: url,
		data: {},
		method:'GET',
		header: {
			'Access-Control-Allow-Origin':'*'
		},
		success: (result) => {
			try {
				uni.setStorageSync('storage_area', JSON.parse(result.data.items));
				this.arealist = JSON.parse(res.data.items);
			} catch (e) {
				// error
			}
	
		},
		fail: (e) => {
			res(e);
		}
	})
}

在这里 arealist 这个变量赋值过程延时,导致页面上展示的时候是空。

解决这个问题 使用 异步方法同步化 async和await关键字

onLoad(){
	this.setAreaList();
},
methods: {
	async setAreaList(){ //这里使用异步关键字
		let area = await this.areaCache(); //这里使用了await 会等待areaCache这个方法返回数据后才会去执行下面的代码
		
	        console.log(area);
	}
}

areaCache方法必须返回的是一个Promise对象

areaCache:function(){
	return new Promise((res) => {
		try {
			const value = uni.getStorageSync('storage_area');
			if (value) {
				res(value);
			}else{
				uni.request({
					url: url,
					data: {},
					method:'GET',
					header: {
						'Access-Control-Allow-Origin':'*'
					},
					success: (result) => {
						try {
							uni.setStorageSync('storage_area', JSON.parse(result.data.items));
							res(JSON.parse(result.data.items));
						} catch (e) {
							// error
						}
				
					},
					fail: (e) => {
						res(e);
					}
				})
			}
			
		} catch (e) {
			// error
		}
	})
}

注意点:这里的 async 和 await 必须成对出现 不然会报错。

相关文章

useRoute,userRouter的用法

 import { useRoute, useRouter } from 'vue-router'; 这里的useRoute是获取传递的变量:const route...

vue3中defineProps传值使用ref响应式失效详解

子组件接收父组件的传参。父组件:<template> <Son :data="data"/> </template> <s...

Vue2.x笔记

vue2.0 开始不能挂载到<html> 或者 <body> 上。 transition 动画过渡的时候,如果是:<transit...

vuex存储和本地存储(localstorage、sessionstorage)的区别

1. sessionStorage    sessionStorage 方法针对一个 session 进行数据存储。当用户关闭浏览器窗口后,数据会被删除。   用法: ...

vue3 拖拽插件 vue.draggable.next

官网地址:https://github.com/SortableJS/vue.draggable.next安装:npm i -S vuedraggable@next引入插...

vite+vue 插件/组件集合

自动引入插件:https://github.com/antfu/unplugin-auto-importvue的按需组件自动导入:https://github.com/antfu/unplugin-v...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。