1、async-await 语法糖
(1)await须在一个async函数中使用,异步等待
(2) await关键字返回的是Promise
(3)通过try-catch捕捉错误
2、示例
(1)分步计算
function add (a:number,b:number):Promise<number> {
return new Promise((resolve,reject) => {
if (b === 23){
reject(`bad number:${b}`)
}
setTimeout(() => {
resolve(a+b)
},2000)
})
}
function mul(a:number,b:number):Promise<number> {
return new Promise((resolve,reject) => {
setTimeout(() =>{
resolve(a*b)
},3000)
})
}
//await须在一个函数中使用,异步等待
async function calc(){
//通过try-catch 捕捉错误
try{
//分步计算
const a = await add(2,3)
console.log('2+3=',a)
const b = await add(4,5)
console.log('4+5=',b)
const c = await mul(a,b)
console.log('final result=',c) // "final result=", 45
}catch(err){
console.log('caught err:',err)
return undefined
}
}
calc()
(2)同时计算
function add (a:number,b:number):Promise<number> {
return new Promise((resolve,reject) => {
if (b === 23){
reject(`bad number:${b}`)
}
setTimeout(() => {
resolve(a+b)
},2000)
})
}
function mul(a:number,b:number):Promise<number> {
return new Promise((resolve,reject) => {
setTimeout(() =>{
resolve(a*b)
},3000)
})
}
async function calc(){
//通过try-catch 捕捉错误
try{
// 因为 await关键字返回的是Promise,可以同时计算
const [a,b] = await Promise.all([add(2,3),add(4,5)])
console.log('2+3=',a)
console.log('4+5=',b)
const c = await mul(a,b)
//如果把c返回,因关键字async,返回类型为Promise<number>
return c
}catch(err){
console.log('caught err:',err)
return undefined
}
}
calc().then(res => {
console.log('final result=',res)
})