Promise链式调用

首先有多个异步方法

  • 返回一个Promise对象
  • 有50%的几率返回正确 50%返回错误
function p1() : Promise<string> {
return new Promise<string>((resolve, reject) => {
//延时操作 使用setTimeout模拟
setTimeout(()=>{
if(Math.random() > 0.5){
resolve('p1 success')
} else {
reject('p1 error')
}
}, 500);
})
}

function p2() : Promise<string> {
return new Promise<string>((resolve, reject) => {
//延时操作 使用setTimeout模拟
setTimeout(()=>{
if(Math.random() > 0.5){
resolve('p2 success')
} else {
reject('p2 error')
}
}, 500);
})
}

调用这个方法

  • 链式调用
function main() {
p1()
.then(res => {
console.log(res)
return p2()
})
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
})
}

调用main方法

  • 调用和一般方法一样
main()

async & await

首先编写一个异步方法

  • 返回一个Promise对象
  • 有50%的几率返回正确 50%返回错误
function asyncResult() : Promise<string> {
return new Promise<string>((resolve, reject) => {
//延时操作 使用setTimeout模拟
setTimeout(()=>{
if(Math.random() > 0.5){
resolve('success')
} else {
reject('error')
}
}, 1000);
})
}

调用这个异步方法

  • 使用await 需要加async标识方法
  • 因为异步方法我们定义了reject所以要抓取异常
async function main() {
let ans = await asyncResult().catch(err => {
console.log(err)
})
if (ans) {
console.log('成功!', ans)
} else {
console.log('失败!')
}
}

调用main方法

  • 调用和一般方法一样
main()