await后面接一个会return new promise的函数并执行它
await只能放在async函数里
- 使用async和await获取成功结果
function yao(){
return new Promise((resolve,reject){
let sino = parseInt(Math.random()*6+1)
setTimeout(()=>{
resolve(sino)
},3000)
})
}
asnyc function test(){
let = await yao()
}
test()
async中使 await yao() 先执行,等到三秒后执行完再把得到的结果赋值给左边的n,也就是说test函数需要三秒钟才执行完成,所以test函数是异步的,因此前面必须写async
- 获取失败的结果
function yao(reason){
return new Promise((resolve,reject)=>{
let sino = parseInt(Math.random()*6+1)
if(sino>3){
if(reason == '大'){
resolve(sino)
}else{
reject(sino)
}
}else{
if(reason == '大'){
reject(sino)
}else{
resolve(sino)
}
}
})
}
async function test(){
// await和成功之后的操作放到try里,失败的放在catch
try{
let n = await yao('大')
console.log('赢了'+n)
}catch(error){
console.log('输了'+error)
}
}
test()
使用await使我们的异步代码,更像同步的代码
- 如果有多个promise,怎么拿到所有的promise都结束后的结果?
比如有两个色子,我想得到这两个色子的点数
//方法一
function yao(reason){
return new Promise((resolve,reject)=>{
let sino = parseInt(Math.random()*6+1)
if(sino>3){
if(reason == '大'){
resolve(sino)
}else{
reject(sino)
}
}else{
if(reason == '大'){
reject(sino)
}else{
resolve(sino)
}
}
})
}
// Promise.all里面是一个数组
// then两个参数fn
// 第一个参数:调用成功,返回所有promise的结果,是一个数组的形式,
// 第二个参数拿到的是第一个失败的值
Promise.all([yao('大'),yao('大'),yao('大'),yao('小')]).then(
(x)=>{ //成功的数组
console.log("x")
console.log(x)
},
(y)=>{ //失败的第一个结果
console.log("y")
console.log(y)
}
)
// 2.使用await
async function test2(){
// await和成功之后的操作放到try里,失败的放在catch
try{
let n = await Promise.all([yao('大'),yao('大'),yao('大'),yao('小')])
console.log(n) //所有都成功返回一个数组
}catch(error){
console.log(error) //返回第一个失败的数据
}
}
test2()
以上是promise的一些异步使用,配合async和await使用更方便。