asnyc基础用法
function fn(){
return new Promise((resolve)=>{
setTimeout(()=>{
resolve('hi')
},1000)
})
}
(async function(){
let res1 =await fn();
console.log('第一步')
let res2 = await fn();
console.log(res2+'第二步')
let res3 = await fn();
console.log(res3+'第三步')
})()
正如我们所见,自执行函数里面的代码会一行一行地执行,很优雅地解决了异步操作的问题。
async 的语法
async 其实就promise的语法糖。函数前面必须加一个async,异步操作的方法前加一个await 关键字。顾名思义,就是让你等一下,执行完了再继续往下走。注意:await 只能在async函数中执行,否则会报错。
再来一个栗子
let obj = {
say:async function(){
let result = await fn()
console.log('say:'+result)
},
eat: async ()=>{
let result = await fn();
console.log('eat:'+result)
}
}
如果我想先执行完eat方法,再执行say方法。很简单
let aa = async function(){
await obj.eat();
await obj.say()
}
aa()
就这样简单粗暴。
async 解决异常情况
promise如果返回的是一个错误的结果,如果没有做异常处理的话,就会报错,所以我们使用try..catch来捕获一下异常就可以可以拉
function fn2(value){
return new Promise((resolve,reject)=>{
if(value=='a'){
console.log('success')
resolve()
}else{
console.log('error')
reject('错误')
}
})
}
// 使用try...catch 针对promise成功,与错误的做出不同的处理
async function eat(value){
try {
await fn2(value);
} catch (err) {
console.log(err);
}
}
网友评论