async-await

1:异步函数的简单写法

复制代码
1 async function foo1(){
2 
3 }
4 const foo2=async()=>{
5 
6 }
7 class Foo{
8     async bar()
9 }
复制代码

2:异步函数的执行流程

!如果没有什么特殊的操作:会按照普通函数按顺序执行

!三种返回值:类似于resolve参数

复制代码
 1 //按顺序依次执行
 2 async function foo() {
 3     console.log("foo function start~");
 4     console.log("内部的代码执行1");
 5     console.log("内部的代码执行2");
 6     console.log("内部的代码执行3");
 7     console.log("foo function end~");
 8     //1:返回一个值
 9     // return 1 //结果为1
10 
11 
12     //2:返回thenable
13     // return {
14     //     then: function(resolve, reject) {
15     //         resolve('hahahha') //结果为hahahha
16     //     }
17     // }
18 
19 
20     //3:返回Promise
21     return new Promise((resolve, reject) => {
22         setTimeout(() => {
23             resolve("xiixi")
24         }, 1000)
25     })
26 
27 
28 }
29 foo().then(res => {
30         console.log(res);
31     })
复制代码

 

需要注意的是:函数一定要return 值 否则是undefined

 

 3:异步函数和普通函数的区别

①:异步函数的返回值一定是Promise

复制代码
 1 async function foo() {
 2     console.log("foo function start~");
 3     console.log("内部的代码执行1");
 4     console.log("内部的代码执行2");
 5     console.log("内部的代码执行3");
 6     console.log("foo function end~");
 7     //1:返回一个值
 8     return 1 //结果为1
 9 const promise = foo()
10 promise.then(res => {
11     console.log(res);
12 })
复制代码

②:关于抛出异常,普通函数抛出异常后之后的代码不会执行,但是异步函数会执行

复制代码
 1 function foo1() {
 2     console.log("foo function start~");
 3     console.log("中间代码");
 4     throw new Error("普通函数的异常")
 5     console.log("foo function end~");
 6 }
 7 async function foo2() {
 8     console.log("foo function start~");
 9     console.log("中间代码");
10     //异步函数中的异常,会被作为异步函数返回的Prmonise的reject的值
11     throw new Error("异步函数的异常")
12     console.log("foo function end~");
13 }
14 foo1()
15 foo2().catch(res => {
16         console.log(res);
17     })
18     //普通函数不会执行 异步函数会执行
19 console.log("后续还有代码");
复制代码

4:async中使用await

await 后面一般跟上表达式(表达式返回Promise ,也可以是值(普通值、thenable、Promise)---直接看例子

复制代码
 1 // //await跟上表达式
 2 function requestData() {
 3     return new Promise((resolve, reject) => {
 4         setTimeout(() => {
 5             reject(222)
 6         }, 2000)
 7     })
 8 }
 9 async function foo() {
10     //一般情况下 后面跟着表达式(表达式返回Promise)
11     const res1 = await requestData()
12     //等到await有结果了才会执行
13     console.log(res1);
14     console.log("----------");
15 
16     const res2 = await requestData()
17     //等到await有结果了才会执行
18     console.log("res2后面的代码");
19 }
20 foo()
21 //2:跟上其他的值 普通的值/thenable/Promise 类似于前面的逻辑
22 async function foo() {
23     const res1 = await 123
24     console.log(res1);
25 }
26 foo()
27 //3:reject值
28 async function foo() {
29     const res1 = await requestData()
30     console.log(res1);
31 }
32 foo().catch(err => {
33     console.log(err);
34 })
复制代码

 

posted @   沁霓  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示