Javascript的promise,async和await的区别详解
作者:河流儿 发布时间:2024-04-22 22:43:48
标签:Javascript,promise,async,await
终于把promise, async, await的区别和联系弄清楚了,看下面代码
写法1,2是promise的写法
写法6是async和await的写法
主要看第2种写法和第6中写法即可, 第2种写法是promise的典型写法,第6中写法是async, await的典型写法
// 以下三个请求依次执行
req1 = () => { return fetch("http://example.com/api/v1/get")}
req2 = () => { return fetch("http://example.com/api/v1/post")}
req3 = () => { return fetch("http://example.com/api/v1/delete")}
//写法1
req1().then(res=>{
console.log("1: ",res)
req2().then(res =>{
console.log("2: ",res)
req3().then(res =>{
console.log("3: ",res)
})
})
})
// 写法2
req1().then(res =>{
console.log("1: ", res)
return req2()
})
.then(res =>{
console.log("2: ", res)
return req3()
})
.then(res =>{
console.log("3: ", res)
})
// 写法3
function f1(){
req1()
req2()
req3()
}
// 写法4
async function f2(){
await req1
await req2
await req3
}
// 写法5
async function f3(){
req1().then(res => {
console.log("1:", res)
})
await f3_1()
}
async function f3_1(){
req1().then(res => {
console.log("2:", res)
})
await f3_2()
}
async function f3_2(){
req2().then(res=>{
console.log("3: ",res)
})
}
// 写法6
ff()
async function ff(){
await req1_good()
}
async function req1_good(){
fetch("http://example.com/api/v1/get").then(res =>{
console.log("1: ",res)
})
await req2_good()
}
async function req2_good() {
fetch("http://example.com/api/v1/post").then(res =>{
console.log("2: ",res)
})
await req3_good()
}
async function req3_good() {
fetch("http://example.com/api/v1/delete").then(res => {
console.log("3: ",res)
})
}
最外层的async函数调用之后立即返回了,但是async还是里面还是在逐层执行
await的作用是等待其修饰的函数内部的所有await函数都执行完毕,
从最外层启动一个async函数相当于go一个协程,await func 也相当于go 一个协程,不同在于await = go + waitgroup
await比promise高明的地方在于,promise在then里面调用另一个promise时,不得不return另一个promise再then, 或者在then中回调,但是await完全不需要
async是为了异步,await是为了异步+阻塞,缺一不可
来源:https://blog.csdn.net/github_34777264/article/details/123618576


猜你喜欢
- 0. 学习目标我们已经知道算法是具有有限步骤的过程,其最终的目的是为了解决问题,而根据我们的经验,同一个问题的解决方法通常并非唯一。这就产生
- 问题:SQL Server 2000中设计表时如何得到自动编号字段?解答:具体步骤如下:①像Access中的自动编号字段右键你的表-->
- SQL Server是一个关系数据库管理系统,应用很广泛,在进行SQL Server数据库操作的过程中难免会出现误删或者别的原因引起的日志损
- 人脸图像特征提取方法(一)HOG特征提取1、HOG简介Histogram of Oriented Gridients,缩写为HOG,是目前计
- 前言最近在做一个人脸识别的项目,需要用数据库保存学生信息与前段交互。MySQL的优点1、mysql性能卓越,服务稳定,很少出现异常宕机。2、
- 本文实例讲述了PHP实现的AES加密、解密封装类与用法。分享给大家供大家参考,具体如下:<?php/** * Class AES *
- 注意转义字符\的使用\\,\",\$ 注意使用8进制或16进制字符表示 \xf6 echo "H\xf6me"
- 本文实例讲述了Python多层装饰器用法。分享给大家供大家参考,具体如下:前言Python 的装饰器能够在不破坏函数原本结构的基础上,对函数
- Centos7的yum源中默认是没有mysql,因为现在已经用mariaDB代替mysql了。首先我们下载mysql的repo源,我们可以去
- 今天,在家试试django的model的设置,如何设置的联合主键,我经过查资料和实践,把结果记录如下:例如:class user(Model
- 在上一章我们学习了 异常的三个关键字,分别是try、except 以及 finally。我们知道在 try 代码块中如果遇到错误就会抛出异常
- 哪个Python版本?当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3
- 测试环境 硬件:CPU 酷睿双核T5750 内存:2G 软件:Windows server 2003 + sql server 2005 O
- 引言提到 numpy 的数组操作,我们就不得不说到 np.concatenate() 函数,concatenate 一词在英文中是级联的意思
- Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便。自带的包管理器conda也很强大。首先是下载安装。Anaconda
- 可以加入以下3个参数 –without-debug --with-client-ldflags=--all-static,--w
- #!/bin/ksh INTERVAL=5 PREFIX=$INTERVAL-sec-status touch /tmp/running R
- 这篇文章主要介绍了python异常处理try except过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 主要涉及:JOIN 、JOIN 更新、GROUP BY HAVING 数据查重/去重1 INNER JOIN、LEFT JOIN、RIGHT
- 从前两天网上开始一直开着的chatgpt网页突然打不开了,提示1020错误,尝试换了不同代理软件或者代理地点仍然无法解决,也搜了很多资料,比