promise迷你书-读书笔记
2024-10-08 22:03:30
Promise三种类型
Constructor
使用Promise构造器来实例化一个promise对象
var promise = new Promise(function(resolve,reject){
//异步处理
//处理结束,成功调用resolve,失败调用reject
})
Instance Method
promise实例对象处理成功或者失败的回调函数
promise.then(onFulfilled,onRejected)
// resolve(成功)回调函数 onFulfilled
// reject (失败)回调函数 onRejected promise.catch(onRejected)
//reject(失败)时,对异常的处理 onRejected
Static Method
Promise作为全局对象还有静态方法
Promise.all()
Promise.resolve()
Promise.reject()
使用promise对象
function getUrl(url){
return new Promise((resolve,reject)=>{
$.ajax({
url:url,
method:'get',
success:function(res){
resolve(res)
},
error:function(err){
reject(err)
}
})
})
} var url = 'http://httpbin.org/get'
getUrl(url).then((res)=>{
//处理resolve(成功)的回调
console.log(res)
}).catch((err)=>{
//处理reject(异常)的回调
console.log(err)
})
Promise静态方法
Promise.resolve
new Promise的快捷方式
静态方法Promise.resolve(value) 可以认为是 new Promise() 方法的快捷方式
Promise.resolve(42).then(function(value){
console.log(value);
});
Promise.resolve(value) 同样返回一个promise对象,并且会使这个对象从pending状态转为resolved状态
Thenable
Promise.resolve静态方法的另一个作用就是将thenable对象转为promise对象,到底什么样的对象能算是thenable的呢,最简单的例子就是 jQuery.ajax(),它的返回值就是thenable的.因为jQuery.ajax()
的返回值是 jqXHR Object 对象,这个对象具有 .then
方法
function getUrl(url){
return Promise.resolve($.ajax(url))
}
var url = 'http://httpbin.org/get1'
getUrl(url).then((res)=>{
console.log(res)
}).catch((err)=>{
console.log(err)
})
Promise.reject
和Promise.resolve()
一样是静态方法,是new Promise()
的快捷方式
Promise.reject(new Error("BOOM!")).catch(function(error){
console.error(error);
});
每次调用then都会返回一个新创建的promise对象
then的错误使用方法
function badAsyncCall() {
var promise = Promise.resolve();
promise.then(function() {
// 任意处理
return newVar;
});
return promise;
}
首先在 promise.then
中产生的异常不会被外部捕获,此外,也不能得到 then
的返回值,即使其有返回值。
由于每次 promise.then
调用都会返回一个新创建的promise对象,应该采用promise chain的方式将调用进行链式化,修改后如下
function anAsyncCall() {
var promise = Promise.resolve();
return promise.then(function() {
// 任意处理
return newVar;
});
}
最新文章
- NavigationController
- TeX Live安装配置等默认目录
- iOS开发小技巧--iOS8之后的cell自动计算高度
- ETL工具与脚本实现之间的对比
- Android高级音频应用
- Matlab中添加搜索目录
- Project Server 2013两个权限模型介绍
- Ztree中simpleData是怎么转换成标准ztree数组对象的
- [Unity3D]Unity3D游戏开发之鼠标滚轮实现放大缩小
- 第五十九届冠军(使用C++设计一个类不能被继承)
- 【MS SQL】查看任务执行进度
- 每天一个linux命令(45)--telnet命令
- Git 使用记录
- Very Long Suffix Array
- Queue和BlockingQueue的使用以及使用BlockingQueue实现生产者-消费者
- 初始JSP
- Springmvc+WebSocket整合
- 使用 FreeCAD 打开 KiCad 用于制作外壳
- Oracle 表复杂查询之多表合并查询
- oracle 查看数据库版本
热门文章
- Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.212.el6_10.3.x86_64
- 101)PHP,多文件上传
- sql常见面试(2)
- OLED带来全新视觉体验
- springboot学习笔记:7.IDEA下5步完成热部署配置
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-openpyxl读取excel(14)
- Cortana携手微软学术搜索,变身研究人员最佳个人助理
- php--小数点问题
- Cenos配置Android集成化环境, 最终Centos libc库版本过低放弃
- 浅谈JobExecutionContext &; JobDataMap