promise、async、await

一、promise

1.1 promise有2个特性

  1. promise 只有三个状态 pending(进行中)、resolved(已完成)、rejected(已失败),一旦开始执行就不能被打断或终止。
  2. 状态的变化只能从 pending→ resolved 或 pending→rejected

1.2 promise的声明

const promise = new Promise( function(resolve,reject) {
	if(1<2){
		resolve(1)
	} else {
		reject(2)
	}
})

二、async

async的中文意思就是异步的,用法很简单直接在原有的函数之前加async即可将原有的函数变成异步函数,async函数返回的是一个promise对象。

async function hello(){
 	return 'hello'
}
console.log(hello())

运行结果如下:
在这里插入图片描述

普通函数前加async之后变成了异步函数,并返回了一个promise对象。

通过async声明的函数变成了异步函数,返回的是promise对象,如果想获取到promise对象的值,我们可以使用then方法,如下:

async function hello(){
	 	return 'hello'
	}
	console.log(hello())
	hello().then(resp=>{
		console.log(resp)
	})

通过then方法就得到了 async函数返回的promise的值。
在这里插入图片描述

三、await

await的意思是等待,那么它在等什么呢? 可以是任何表达式,不过我们常用的是promise对象的表达式。注意 await只能放在async函数中

了解了 promise 、async 、await之后我们来看看 怎么通过async和await来实现异步转同步。

有了上边的了解我们知道promise是一旦执行就不会被打断,执行后的状态不会被改变,当promise执行完成之后 我们可以通过调用then方法来获取到promise的执行结果,通过async将函数声明为异步函数,不会影响后边的函数的执行,async函数返回一个promise对象,await后接表达式,常接promise表达式,表示等待 异步函数执行完成后,再执行下边的操作。由此,通过asynvc和await就可以实现异步转同步,而避免了回调函数的回调地狱,并且更容易维护。下边我们来看一个例子,来加深对async和await的使用的理解。

以下示例均在vue环境中

点击地图,获取当前区域的人数,通过handleFetchAreaStaffNum()获取到人数后,再调用 addAreaAlert()显示信息窗.

await 必须放在async 方法中, await后接带有promise的表达式,这里的请求是用到axios,经过了封装,fetchAreaStaffNum()函数返回的结果是promise,因此fetchAreaStaffNum()才是真正的异步函数,

示例:

async handleShowAreaAlert() {
	await this.handleFetchAreaStaffNum()
	this.addAreaAlert()
}
async handleFetchAreaStaffNum() {
      await fetchAreaStaffNum(this.areaId).then(resp=>{
        if(resp.data.code === 200) {
          this.areaStaffNum = resp.data.data
        } else {
          this.areaStaffNum = 0
        }
      })
    },
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值