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() 让它自己捕获