ES6中Async的使用

1.async基本用法

async会返回一个promise对象
// 运行async函数,每次执行完一个await后的语句 就会先撤出去执行外部的代码。
async function asyncFunc(){
    await console.log('第1行代码');
    await console.log("第2行代码");
    await console.log("第3行代码");
}
asyncFunc().then(function(){
    console.log("async函数执行完毕")
});
new Promise(function(resolve){
    console.log("Promise中的代码")
    resolve()
}).then(function(){
    console.log("Promise中then中的代码")
})
console.log("同步代码")

// 第1行代码
// Promise中的代码
// 同步代码
// 第2行代码
// Promise中then中的代码
// 第3行代码
// async函数执行完毕

// 执行过程:
// 第一轮:进入async执行一个await输出"第一行代码" ->
//        new Promise(function(){这里是同步代码} then里面才是异步的   所以先输出 "Promise中的代码" ->
//       然后直接输出"同步代码" ->
// 此时同步代码已全部执行完毕 接下去就是异步代码轮着执行
// 第二轮: 进入async执行第二个await 输出:"第二行代码" ->
//        然后执行then中的异步代码 输出:"Promise中then中的代码" ->
// 第三轮: 进入async执行第三个await 输出:"第三行代码" ->
//        这时async中代码执行完毕并且外部也没有代码要执行了 然后调用then()方法
//        输出:"async执行完毕"
// 大致的流程就是这样 想学好async 最好了解一下同步异步以及宏任务、微任务等

2. async语法

2.1 async函数中的返回值会作为then方法的参数
async function func1(){
	return "Hello World"
}
func1().then(result=>{
	console.log(result);  // "Hello World"
})
2.2 async内部抛出异常 会直接导致promise对象编程reject状态 然后异常会被catch捕获
async function func2(){
	throw new Error("异常发生");
}
func2().catch(error=>console.log(error)); //Error: 异常发生
2.3 Promise对象的状态变化
// 默认情况下 当async中的代码执行完毕 async返回的promise变为resolve状态
// 如果中途碰到return则会直接返回并且promise对象变为resolve
// 如果中途抛出异常,则直接返回,promise对象变为reject

3. async中出现异常

// 无论哪一个await出现了异常 都会使整个async函数终止并且返回的promise对象变为reject状态 
// 或者说有一个await后面的promise对象是reject状态 都会使async函数终止并使promise变为reject
// 如果希望async继续运行下去,那么可以使用try...catch...包裹起来 也可以直接在await后面的promise对象后面添加.catch() 让它自己捕获
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章