视频讲解
ES6的 Promise 是个啥哩?,是个承诺。为了解决 js 回调地狱。Promise 给个人体会是: 开始云里雾里,而后越用越好用。今天才明白承诺是什么意思?好比我本身的承诺,若是减肥成功就买个iphone,若是减肥失败就去死~,哈哈然而我并不会。ajax
new Promise((resolve, reject) => { // ... });
resolve, reject 方法由 js 引擎提供,不须要我的编写。编程
new Promise((resolve, reject) => { setTimeout(() => { resolve('hello resolve'); }, 500); }) .then(val => { console.log(val);// hello resolve }, err => { console.error(err);// 该条语句不被执行 });
then最多有两个参数,参数一为 resolve 后回调的函数,参数二为 reject 后的回调函数。then也能够只接收参数一。json
new Promise((resolve, reject) => { setTimeout(() => { reject('hello reject'); }, 500); }) .then(val => { console.log(val); }, err => { console.error(err);// hello reject });
catch其实是 then 函数的一种简写形式,当执行 reject 后,能够被catch 的回调函数接收处理。小程序
new Promise((resolve, reject) => { setTimeout(() => { reject('hello reject'); }, 500); }) .catch(err => { console.log(err); // hello reject });
在 promise 内部发生错误后不会被外层环境捕捉到。segmentfault
try { new Promise((resolve, reject) => { console.log(e); }); } catch(e) { console.log('error is catched? ', e);// 该语句并未执行 }
若 promise 内部发生错误,会被自动的执行reject。数组
new Promise((resolve, reject) => { console.log(e); }) .catch(err => { console.log('error be rejected?', err);// error be rejected? ReferenceError: e is not defined });
let p = new Promise((resolve, reject) => { resolve('i am resolved'); }) .then(val => { return val; }); console.log(p);// Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
在 then 中 return 的值又变成了 promise对象。promise
p.then(val => { console.log(val);// i am resolved });
这个也为链式调用提供了基础。浏览器
all静态方法接收promise 对象的数组,并返回一个 promise 对象。当数组中的全部元素都 resolve 时,结果promise被 resolve。若数组中有一个对象被 reject 了,结果promise对象被reject。本人常常使用 all方法来处理多个 ajax 请求获取数据的界面loading 效果。iphone
let isLoading = true; let p1 = fetch(url1).then(json => { // .... }); let p2 = fetch(url2).then(json => { // ... }); let p3 = fetch(url3).then(json => { // ... }); Promise.all([p1, p2, p3]).then(() => { isLoading = false; });
一样接收一个数组,结果也是一个 promise 对象,当数组中的promise 对象有一个的状态改变时,race方法的结果promise对象变为相同的状态。具体应用场景笔者尚未遇到过。如有人遇到过,请在下面留言告知一下,感激涕零。编程语言
静态函数Promise.resolve返回一个成功的promise对象,静态函数Promise.reject返回一个拒绝状态的 promise 对象。
【开发环境推荐】 Cloud Studio 是基于浏览器的集成式开发环境,支持绝大部分编程语言,包括 HTML五、PHP、Python、Java、Ruby、C/C++、.NET 小程序等等,无需下载安装程序,一键切换开发环境。 Cloud Studio提供了完整的 Linux 环境,而且支持自定义域名指向,动态计算资源调整,能够完成各类应用的开发编译与部署。