对Promise的学习总结与思考

发布时间:2019-08-11 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了对Promise的学习总结与思考脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

学习地址详见:http://es6.ruanyifeng.com/#do...

正文

1.调用resolve或reject并不会终结 Promise 的参数函数的执行

new Promise((resolve, reject) => {
  resolve(1);
  console.log(2);
}).then(r => {
  console.log(r);
});
// 2
// 1

调用resolve(1)以后,后面的console.log(2)还是会执行,并且会首先打印出来。这是因为立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务
一般来说,调用resolve或reject以后,Promise 的使命就完成了,后继操作应该放到then方法里面,而不应该直接写在resolve或reject的后面。所以,最好在它们前面加上return语句,这样就不会有意外。

2.关于catch

getJSON('/posts.json').then(function(posts) {
  // ...
}).catch(function(error) {
  // 处理 getJSON 和 前一个回调函数运行时发生的错误
  console.log('发生错误!', error);
});

上面代码中,getJSON方法返回一个 Promise 对象,如果该对象状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。

1)状态变成reject 的方式有两个:手动操作 reject() reject方法的作用,等同于抛出错误; 异步操作抛出错误,状态就会变为rejected

2)触发catch: 异步操作状态变为rejected; then方法运行中抛出错误

3)一般来说,不要在then方法里面定义Reject状态的回调函数(即then的第二个参数),总是使用catch方法。
思考:第一步出错,是直接执行catch还是接着走then? 直接被catch

3.PRomise 内部的错误不会影响到 Promise 外部的代码
4.任务队列
new Promise是同步的,会马上执行function参数中的事情。等function参数执行完,new Promise才返回一个promise实例对象。

脚本宝典总结

以上是脚本宝典为你收集整理的对Promise的学习总结与思考全部内容,希望文章能够帮你解决对Promise的学习总结与思考所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。