async 和await函数的用法

因为我们代码写出来的是异步操作,浏览器是不会等待你这个方法调用完再调用另外一个方法的,这个时候可以用到async 和await

比如我在onload()或者onshow()里面需要定义两个方法,但是我第二个方法数据是在第一个方法数据里面,这个时候可以用到async和await。async和await必须同时使用,下面是加了同步方法的控制台打印效果,如:

async onShow() {  //在函数前面定义async,代表我对这个执行同步操作
			 await this.getYhInfo()
			 console.log('aaaa')
			// this.GongGaoClick()
},

methods: {
			getYhInfo() {
				return new Promise((resolve)=>{
					let data = {
						userId: this.vuex_user.id
					}
					this.$api.getshequ(data)
						.then(res => {
							console.log(11, res)
							if (res.data.length == 0) {
								this.$u.toast("暂未查询到房屋信息");
								setTimeout(() => {
									uni.navigateTo({
										url: "./index"
									})
								}, 2000);
							} else {
								this.info = res.data[0]
								this.$u.vuex('vuex_homeinfo', this.info)
								// console.log(3333, this.vuex_homeinfo)
							}
							resolve()
						})
						.catch(res => {
							uni.navigateTo({
								url: "./index"
							})
						})
				})
			},
}

控制台打印代码,显示打印了我第一个方法里面的请求接口返回结果,然后再打印了aaaa

 如果我不加async和await的话,控制台不会等你把这个方法调用完,直接是异步方法让你的aaaa先打印,然后再输出你请求的数据

onShow() {
			this.getYhInfo()
			console.log('aaaa')
			// this.GongGaoClick()
	},

控制台打印,可以看到是先输出aaaa,然后才返回你的接口数据

 使用async和await返回的需是一个Promise对象,然后在代码中执行resolvereject,在函数里面使用了async和await后,在这个方法里面定义promise对象,如:

getYhInfo() {
				return new Promise((resolve,reject) => { //这里可以只放置成功的返回方法

					let data = {
						userId: this.vuex_user.id
					}

					this.$api.getshequ(data)
						.then(res => {
							
							if (res.data.length == 0) {
								this.$u.toast("暂未查询到房屋信息");
							} else {
								this.$u.vuex('vuex_homeinfo', this.info)
							}
							resolve()   //成功后执行resolve,也可以在resolve里面定义数据,在函数里面放置,这样可以在函数里面获取到定义的数据
						})
						.catch(res => {
							console.log(3)
						})
				})
			},

在你定义的函数方法里面,使用async和await,在封装的函数方法里面可以定义同步请求,执行完之后才执行下一步,可以让循环遍历异步变成同步,如:

async getInfo(){


				for (let i = 0; i < this.dd.length; i++) {
					let data = {
						userId: this.vuex_user.id,
						inDate: this.dd[i]
					}	
					await this.getUserIncheckIn(data, i)  //同步调用
				}

     }

猜你喜欢

转载自blog.csdn.net/weixin_67434908/article/details/130849756