当前位置: 首页 > news >正文

长春网站策划大连市房屋管理局官网

长春网站策划,大连市房屋管理局官网,美工培训班,池州网站建设推广ES6中promise的使用 本文目录 ES6中promise的使用基础介绍箭头函数function函数状态 原型方法Promise.prototype.then()Promise.prototype.catch() 静态方法Promise.all()Promise.race()Promise.any() 链式回调 基础介绍 官网#xff1a;https://promisesaplus.com/ window.…ES6中promise的使用 本文目录 ES6中promise的使用基础介绍箭头函数function函数状态 原型方法Promise.prototype.then()Promise.prototype.catch() 静态方法Promise.all()Promise.race()Promise.any() 链式回调 基础介绍 官网https://promisesaplus.com/ window.Promise箭头函数 let p1 new Promise((resolved, rejected) {console.log(p1 Promise); }) console.log(p1);function函数 let p2 new Promise(function (resolve, reject) {console.log(p2 Promise); }); console.log(p2);new Promise函数是同步函数是立即执行的 状态 promise共有三种状态pending / fulfilled / rejected 状态转换 pending - fulfilled成功状态pending - rejected失败状态 let p new Promise((resolved, rejected) {console.log(p Promise);// resolved()// rejected() }) console.log(p);竞争 原型方法 Promise.prototype.then() then方法接收两个参数一个是成功时的回调函数一个是失败时的回调函数 let p new Promise(function (resolve, reject) {// 将状态修改为成功resolve(BNTang);// 将状态修改为失败// reject(BNTang); });指针函数 p.then((val) {console.log(val val);},(err) {console.log(err err);} )function函数 p.then(function(val){console.log(val val);},function(err){console.log(err err);} )function函数2 function success(data) {console.log(成功, data); }function error(data) {console.log(失败, data); }promise.then(success, error);Promise需要有返回值在PromiseResult中可以查看 如果new Promise中没有回调则then里的函数不会执行 let p new Promise((res,rej){ })p.then(val{console.log(11); // 11不输出 })then获取返回值成功则进入第一个函数失败进入第二个函数 function f() {return ghn }let p new Promise((resolved, rejected) {// resolved(f())rejected(f()) })p.then((val) {console.log(val val);},(err) {console.log(err err);} ) console.log(pthen也会返回一个新的Promise对象这个新Promise的状态取决于回调函数的执行情况默认是undefined let p new Promise((res, rej) {res(11) })let p1 p.then((val) {console.log(val1 val);return { name: ghn }}, (err) {console.log(err1 err);} )p1.then(value {console.log(p1-then JSON.stringify(value)); })console.log(p); console.log(p1);then中抛出异常或返回失败第二个then的promise实例状态是根据p.then的返回值决定的 let p new Promise((res, rej) {res(11) })let p1 p.then((val) {console.log(val1 val);// return { name: ghn }return new Promise((resolved, rejected) {rejected(2)})// throw new Error(my error)}, (err) {console.log(err1 err);} )p1.then((val) {console.log(p1-then JSON.stringify(val)); },(err) {console.log(p1-then-err JSON.stringify(err)); }) console.log(p); console.log(p1);Promise.prototype.catch() 基础使用 p.then((data) {console.log(resolved,data);},(err) {console.log(rejected,err);} ); p.then((data) {console.log(resolved,data); }).catch((err) {console.log(rejected,err); });使用catch捕获异常 let p new Promise((res, rej) {res(11) })let p1 p.then((val) {console.log(val1 val);// return { name: ghn }// return new Promise((resolved, rejected) {// rejected(2)// })throw new Error(my error)}, (err) {console.log(err1 err);} ).catch(err {console.log(catch err.message);// 根据错误类型判断是否继续抛出if (err instanceof Error) {// 如果错误是使用 new Error() 创建的则不再继续传递return;}// 如果错误是其他类型如Promise的reject方法传递的值则继续抛出throw err; })p1.then((val) {console.log(p1-then JSON.stringify(val)); },(err) {console.log(p1-then-err JSON.stringify(err)); }) console.log(p); console.log(p1);静态方法 Promise.all() Promise.all() 方法是 的关系Promise.any() 方法是 || 的关系 Promise.race()方法是 赛跑机制 var p Promise.all([p1, p2, p3]);只有p1、p2、p3的状态都变成fulfilledp的状态才会变成fulfilled此时p1、p2、p3的返回值组成一个数组传递给p的回调函数 let p1 new Promise(function(resolve,reject){resolve(1); }); let p2 new Promise(function(resolve,reject){resolve(2); }); let p3 new Promise(function(resolve,reject){resolve(3); });Promise.all([p1, p2, p3]).then(function (results) {console.log(success:results); }).catch(function(r){console.log(error);console.log(r); });只要p1、p2、p3之中有一个被rejectedp的状态就变成rejected此时第一个被reject的实例的返回值会传递给p的回调函数 let p1 new Promise(function(resolve,reject){resolve(1); }); let p2 new Promise(function(resolve,reject){resolve(2); }); let p3 new Promise(function(resolve,reject){reject(3); });Promise.all([p1, p2, p3]).then(function (results) {console.log(success:results); }).catch(function(r){console.log(error);console.log(r); });Promise.all() 方法提供了并行执行异步操作的能力在 all 中所有异步操作结束后才执行回调 function p1() {var promise1 new Promise(function (resolve, reject) {console.log(p1的第一条输出语句);resolve(p1完成);});return promise1; }function p2() {var promise2 new Promise(function (resolve, reject) {console.log(p2的第一条输出语句);setTimeout(() {console.log(p2的第二条输出语句);resolve(p2完成);}, 2000);});return promise2; }function p3() {var promise3 new Promise(function (resolve, reject) {console.log(p3的第一条输出语句);resolve(p3完成);});return promise3; }Promise.all([p1(), p2(), p3()]).then(function (data) {console.log(data); });Promise.all()获得的成功结果的数组里面的数据顺序和接收到的数组顺序是一致的即p1的结果在前即便p1的结果获取的比p2要晚 // 在前端开发请求数据的过程中会遇到发送多个请求并根据请求顺序获取和使用数据的场景 let wake (time) {return new Promise((resolve, reject) {setTimeout(() {resolve(${time / 1000}秒后醒来)}, time)}) }let p1 wake(3000) let p2 wake(2000)Promise.all([p1, p2]).then((result) {console.log(result) // [ 3秒后醒来, 2秒后醒来 ] }).catch((error) {console.log(error) })Promise.race() Promise.race([p1, p2, p3])里面的结果哪个获取的快就返回哪个结果不管结果本身是成功还是失败 let p1 new Promise(function(resolve,reject){resolve(1); }); let p2 new Promise(function(resolve,reject){resolve(2); }); let p3 new Promise(function(resolve,reject){resolve(3); });Promise.race([p1, p2, p3]).then(function (results) {console.log(success:results); }).catch(function(r){console.log(error);console.log(r); });使用场景几个服务器的好几个接口都提供同样的服务不知道哪个接口更快可以使用Promise.race let p1 new Promise(function(resolve,reject){setTimeout(() {resolve(1);}, 1000); }); let p2 new Promise(function(resolve,reject){reject(2); }); let p3 new Promise(function(resolve,reject){resolve(3); });Promise.race([p1, p2, p3]).then(function (results) {console.log(success:results); }).catch(function(r){console.log(error);console.log(r); });Promise.any() 只要p1p2状态有一个变为fulfilled该实例的状态为fulfilled const pErr new Promise((resolve, reject) {reject(总是失败); });const pSlow new Promise((resolve, reject) {setTimeout(resolve, 500, 最终完成); });const pFast new Promise((resolve, reject) {setTimeout(resolve, 100, 很快完成); });Promise.any([pErr, pSlow, pFast]).then((value) {console.log(value); },(err) {console.log(err); }).catch((aggregateError) {console.log(error);console.log(aggregateError); }); // expected output: 很快完成如果所有的 Promises 都失败该实例的状态将失败rejected结果值是包含所有失败状态的 AggregateError 的实例的结果集 const pErr new Promise((resolve, reject) {reject(总是失败); });const pSlow new Promise((resolve, reject) {setTimeout(reject, 500, 最终失败); });const pFast new Promise((resolve, reject) {setTimeout(reject, 100, 很快失败); });Promise.any([pErr, pSlow, pFast]).then((value) {console.log(value); }).catch((aggregateError) {console.log(aggregateError.errors); });链式回调 https://segmentfault.com/a/1190000010420744 then回调then方法提供一个供自定义的回调函数 若传入非函数则会忽略当前then方法回调函数中会把上一个then中返回的值当做参数值供当前then方法调用then方法执行完毕后需要返回一个新的值给下一个then调用没有返回值默认使用undefined每个then只可能使用前一个then的返回值 val接收到的是上一个then或者Promise的结果res是被返回并传递给下一个then作为它的参数 let p new Promise((resolved, rejected) {resolved(1) })let p1 p.then((val) {console.log(val)let res child;return res;} )p1.then((val) {console.log(val)} )// 1 // child具体使用1then是否是函数 let func function() {return new Promise((resolve, reject) {resolve(返回值);}); };let cb function() {return 新的值; }// 有返回值 func().then(function () {return cb(); }).then(resp {console.warn(resp);console.warn(1 ); });// 无返回值 func().then(function () {cb(); }).then(resp {console.warn(resp);console.warn(2 ); });// cb()执行后返回的并不是一个函数 // 在Promise规范中会自动忽略调当前then // 会把func中的返回值供下一个then使用 func().then(cb()).then(resp {console.warn(resp);console.warn(3 ); });// 第一个方法在回调内部返回cb执行后的值 // 第四个方法则直接把cb当做回调 func().then(cb).then(resp {console.warn(resp);console.warn(4 ); });具体使用2reject和catch reject后的东西一定会进入then中的第二个回调如果then中没有写第二个回调则进入catchresolve的东西一定会进入then的第一个回调肯定不会进入catch仅仅返回一个Error对象并不会使Promise变为rejected状态为了真正拒绝一个Promise需要throw一个错误或调用reject()函数 new Promise((resolve, reject) {resolve(请求成功了); }) .then((value) {console.log(value);return new Error(错误); }) .catch(() {console.log(错误); //未打印发生穿透 }) .then((value) {console.log(111); }) .then((value) {console.log(222); })除非catch()再次抛出错误否则链中之后的任何then()块都将按正常顺序执行因为catch()会把Promise的状态从rejected转变为fulfilled new Promise((resolve, reject) {resolve(请求成功了); }) .then((value) {console.log(value);throw new Error(错误); }) .catch(() {console.log(错误); }) .then((value) {console.log(111); }) .then((value) {console.log(222); })
http://www.pierceye.com/news/477023/

相关文章:

  • 学校网站内容建设银行网站电脑上不去
  • 住建部工程建设标准网站上海室内设计事务所
  • 做外贸采购都是用什么网站网站重构方案
  • 企业网站做推广河南app开发
  • 海宁做网站的公司仿搜狐视频网站源码
  • 网站备案和不备案的上海制作网站公司网站
  • 网站建设专业介绍在线平面图设计
  • 临时工找工作网站做美缝手机网站不收录
  • 凡科建站怎么样网络推广网站培训班
  • 优惠券的网站怎么做的网站建设业务元提成
  • 网站开发项目组成员免费建网站的app
  • 怎样自己做公司网站驻马店logo设计公司
  • 知名网站制作公司排名徐州人才网最新招聘2023
  • 网站建设与网页设计难学吗做彩票的网站
  • 请问怎么做网站郑州小程序开发制作
  • 城乡建设网站职业查询系统小公司根本办不了icp许可证
  • 网站架构搭建搭建网站是什么专业
  • 互助网站建设电脑做网站端口映射
  • 电力行业做的好的招投标网站wordpress 自定义注册表单
  • 网站开发采集工具网站设计计划书的要求
  • 技术支持:佛山网站建设珠海网站制作服务
  • 公司网站建设方案ppt网站下载织梦模板
  • 免费创建虚拟网站漳州鼎信
  • 武义县网站建设公司上海seo外包
  • 免费html网站模板下载怎么做网站外链接
  • 南昌网站建设公司收费桂林做网站的公司有哪些
  • 南京网站建设方案智能管理系统
  • 黄埔网站建设价格资源网站推广
  • 桦南县建设局网站动漫制作技术和动漫设计
  • 在农村开个网站要多少钱网站客户运营