async单独使用和其他函数执行顺序一样
// async单独使用和其他函数执行顺序一样
async function foo() {
console.log("foo function start~") //2
console.log("内部的代码执行1") //3
console.log("内部的代码执行2") //4
console.log("内部的代码执行3") //5
console.log("foo function end~") //6
}
console.log("script start") //1
foo() // 2/3/4/5/6
console.log("script end") //7
// 执行顺序
// script start
// foo function start~
// 内部的代码执行1
// 内部的代码执行2
// 内部的代码执行3
// foo function end~
// script end
async函数与普通函数区别
返回值:async异步函数的返回值一定是一个Promise
async function foo() {
console.log("foo function start~")
console.log("中间代码~")
console.log("foo function end~")
// 1.返回一个值
// return "swh"
// 2.返回thenable
// return {
// then: function(resolve, reject) {
// resolve("swh")
// }
// }
// 3.返回Promise
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("swh")
}, 2000)
})
}
// 异步函数的返回值一定是一个Promise
const promise = foo()
// Promise对象.tnen可以拿到返回结果
promise.then(res => {
console.log("返回值", res)
})
// 打印
// foo function start~
// 中间代码~
// foo function end~
// 返回值 swh
异常情况:普通函数抛出异常,终止后面代码执行
function foo() {
console.log("foo function start~")
console.log("中间代码~")
throw new Error("error message")
console.log("foo function end~")
}
console.log("后续还有代码~~~~~")
// foo function start~
// 中间代码~
// Error: error message
async异步函数可以捕获错误处理,不会终止后续代码执行
async function foo() {
console.log("foo function start~")
console.log("中间代码~")
// 异步函数中的异常, 会被作为异步函数返回的Promise的reject值的
throw new Error("error message")
console.log("foo function end~")
}
// 异步函数的返回值一定是一个Promise
foo().catch(err => {
console.log("swh err:", err) //捕获异常信息
})
console.log("后续还有代码~~~~~")
// foo function start~
// 中间代码~
// 后续还有代码~~~~~
// swh err: Error: error message
![点击并拖拽以移动 wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==](https://img-blog.csdnimg.cn/2022010707061749509.gif)