promise基础和进阶
2024-10-05 20:13:04
本文不对Promise的做过深的解析,只对基础的使用方法,然后会记录一些promise的使用技巧,可以巧妙的解决异步的常见问题。
在过去一直理解的是解决了一直异步回调的坑,但是用了npm async之后感觉异步回调其实稍微习惯一下其实还是蛮友好的。
其实相对于async(npm那个)使用promise的好处主要在于:
1. 可以 进行 then和catch对错误和流程进行控制。把错误控制和流程控制分离,写的时候可以更加专注流程。
2. 语义上和同步代码逻辑类似,理解程度更加容易
1. 基础语法
Promise对象
Promise状态
pending 初始化
fulfilled 执行成功
rejected 执行失败
快速生成Promise对象
上述相当于一下的代码
Promise.all和race方法
all就是全部promise对象全部执行成功或者失败,race就是有一个执行成功或者失败。返回值和reject及resolve一样是一个promise对象
2. Promise进阶
promise很优秀的一点其实在于他可以pending,我们只记录他,并不去执行
所以就可以有如下的写法
循环存储
Promise.all(data.map((itemInfo => {
let item = new Model(itemInfo);
return item.save();
})));
迭代
let sequentiallyStore = function (model, data) {
let current = ;
const len = data.length;
const Model = mongoose.model(model);
function save() {
current++;
if (current < len) {
const item = new Model(data[current]);
return item.save().then(save);
} else {
return Promise.resolve();
}
}
save(); data.reduce((pre, cur) => {
return pre.then()
}, new Promise()) };
3. Promise的使用
方便流程控制
每一个Promise都有then和catch方法,resolve会进入then中一直往下执行,reject会直接调到catch中进行错误处理,所以我们书写一个promise流程时,只要遇到错误,就只管reject就行,然后在最后进行错误处理即可,不需要担心如何去把错误返回给下一步。在这一点是和express的设计思想一致,所以流程我我们尽量少的去加工和操作错误,可以统一在最后一步处理。好处在于
1. 更加专注业务
2. 错误集中处理
方便业务重构
封装promise的函数可以类似于一个个的插槽,所有异步处理统一用promise可以更加方便的抽离业务,把业务分解成一个个功能性的插槽,然后再重组实现项目的其他业务,在封装工具函数,分离通用业务时会更加清晰明了,方便进行项目的迭代。
提高代码可读性
异步任务通过then进行后续处理,就会类似于同步的业务逻辑,可读性很高。
为了提升代码的可读性和方便代码的控制,尽量去封装成各种功能的promise在项目里进行重组。不要一直then的往下写。
最新文章
- iOS开发系列--让你的应用&ldquo;动&rdquo;起来
- ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了(转载)
- 自定义圆形控件 RoundImageView
- php建立多层目录的函数
- (一)WebRTC手记之初探
- zsh(yum装包的时候,有时候会不行)
- java通过移位转16进制
- Maven 打包可运行 jar
- UGUI 滚动视图
- methanol 模块化的可定制的网页爬虫软件,主要的优点是速度快。
- 网络语音视频技术浅议(附多个demo源码下载)
- R实现地理位置与经纬度相互转换
- CentOS 6 下无法wget https链接的解决方法
- Java就业企业面试问题-ssh框架
- 【JDBC】Java 连接 MySQL 基本过程以及封装数据库工具类
- python学习——读取染色体长度(七:读取fasta文件)
- 分布式服务框架介绍:最成熟的开源NIO框架Netty
- 4、Kafka命令行操作
- Java 变量、循环、判断
- ThinkPHP5自定义分页样式