promise介绍
作用:
用于解决异步函数中的回调地域问题
- 本质是一个构造函数,使用时需要使用new关键字创建一个实例,并要传入一个函数fn(一般称fn为执行器)(同步)
- 执行器需要传入两个参数,resolve,reject(异步函数,不会立即执行)
- resolve,reject的执行内容通过实例对象的then方法指定(resolve(),reject())(异步)
promise对象:表示一个未完成,但是将要完成操作
【注意】执行过程中,同步代码先执行,执行完后在执行异步代码
// promise创建实例为同步,
let p = new Promise(function(resolve,reject){
resolve:异步函数成功后,执行的函数resolve()
reject:异步函数失败后,执行函数reject()
})
// 定义执行器then方法为异步代码
p.then(()=>{
console.log("同意了");
},
()=>{
console.log("没同意");
}
)
状态:
1.pending:初始值 未决定的,将要发生的
2.fulfiled/resolved 操作成功
3.rejected 操作失败
状态变化:pending => fulfiled
pending => rejected
【注意】状态一旦变化,后面修改状态的代码就不执行了
promise . resolve():返回执行状态为fufilled的promise新对象
async介绍:
作用:定义异步函数
使用
- async 写在普通函数定义的前面
- 返回值时promise对象
- promise对象的值有函数的返回值决定
- 如果返回值不是一个promise对象,返回的时成功的promise对象,值为返回的内容
- 如果返回值是一个promise对象,则返回的是该promise对象,值为resolve或reject
await介绍 :
之前使用promise或者回调函数来解决异步问题时
对异步代码进行操作,promise需要将
- await必须写在async函数内,但是async函数内可以没有await。
- await关键字后面一般是promise对象,也可以是其他值,但不推荐
- await的返回值,就是promise的成功执行值。
- await后面跟的promise对象失败,就会抛出异常,后续代码就不会执行。使用try{}catch(err){}处理异常,err就指向promise中reject的参数。
function 摇色子(猜测){
return new Promise((resolve, reject)=>{
let sino = parseInt(Math.random() * 6 +1)
if(sino > 3){
if(猜测 === '大'){
resolve(sino)
}else{
reject(sino)
}
}else{
if(猜测 === '大'){
reject(sino)
}else{
resolve(sino)
}
}
setTimeout(()=>{
resolve(sino)
},300)
})
}
async function test(){
try{
//把await及获取它的值的操作放在try里
let n =await 摇色子('大')
console.log('赢了' + n)
}catch(error){
//失败的操作放在catch里
console.log('输了' + error)
}
}
test();