Promise 构造函数接受一个函数作为参数,该函数的2个参数分别是 resolve 和 reject。他们是2个函数,有 JavaScript 引擎提供,不用自己部署。

 
var promise = new Promise ( function ( resolve, reject) {
if ( /* 异步操作成功 */ ) {
resolve (value)
} else {
reject (error)
}
})
 

如果调用 resolve 函数和 reject 函数时带有参数,那么这些参数会被传递给回调函数。

Promise 实例生成以后,可以用 then 方法分别指定 Resolved 状态和 Rejected 状态的回调函数(then 方法的作用是为 Promise 实例添加状态改变时的回调函数)。

promise.then( function (value) {
// success
}, function (value) {
// failure
})

Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。也就是说,错误总是会被下一个 catch 语句捕获。注意:因此无法知道错误是哪个Promise产生的,除非设置了不一样的错误提示。

一般,不要在 then 方法中定义 Rejected 状态的回调函数(即 then 的第二个参数),而应该总是使用 catch。

如果没有使用 catch 方法指定错误处理的回调函数,Promise 对象抛出的错误不会传递到外层代码,即不会有任何反应。

catch 方法返回的还是一个 Promise 对象,因此还可以接着调用 then 方法。

如果没有报错,则会跳过 catch 方法,继续执行后面的 then 方法(如果后面还有 then 方法的话)。

 
getJson ('/post/1.json').then ( function (post) {
return getJson(post.commentURL)
}).then ( function (comments) {
// some code
}).catch ( function (error) {
// 处理前面3个 Promise 产生的错误
})
 

最新文章

  1. 解决apache 443端口被占用
  2. P53 T3
  3. HNU 12869 Sequence(循环节)
  4. SQL 不同的数据类型
  5. [转] 弱校ACM奋斗史
  6. Microsoft Dynamics CRM4.0编程---说明
  7. vc++上的MFC的对象序列化和反序列化
  8. Swift - 使用导航条和导航条控制器来进行页面切换
  9. For each...in / For...in / For...of 的解释与例子
  10. 页面显示LCD液晶字体或者其他特殊字体
  11. 20165235 2017-2018-2《Java程序设计》课程总结
  12. linux环境,通过rpm删除mysql包,报错:error reading information on service mysqld: Invalid argument
  13. Spring boot 入门篇
  14. [20170622]传输表空间与dblink.txt
  15. 阿里云 mysql 远程登录权限
  16. 【读书笔记】思维导图 Talk Like Ted
  17. 基础数据类型-list
  18. kafka-zk-安装测试初体验
  19. Go搭建一个Web服务器
  20. UVA - 434 Matty's Blocks

热门文章

  1. leetcode_951. Flip Equivalent Binary Trees_二叉树遍历
  2. Android(java)学习笔记193:ContentProvider使用之获得系统联系人信息01
  3. 关闭 将jar或者aar发布到到mvn 中(用github作为仓库), 通过gradle dependency 方式集成
  4. oracle分析函数之ratio_to_report
  5. centOS取消锁屏
  6. MySQL-----唯一索引
  7. Spring Boot 2 (三):Spring Boot 开源软件都有哪些?
  8. Tomcat处理HTTP请求原理
  9. Windows和Linux启动虚拟环境
  10. LaTex/Overleaf使用笔记