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

聊城网站建设 推广聊城博达河北中凯建设有限公司网站

聊城网站建设 推广聊城博达,河北中凯建设有限公司网站,嘉兴建设规划网站,网页设计旅游网站前言目录 实例方法 catch finally 静态方法 reslove reject race all allSettled any 实例方法 提供给promise实例的方法 包括catch 与finally catch Promise 实例的 catch() 方法用于注册一个在 promise 被拒绝时调用的函数。它会立即返回一个等效的 Promise 对象这可以允许你链式调用其他 promise 的方法。此方法是 Promise.prototype.then(undefined, onRejected) 的一种简写形式。 1 内部调用then方法此方法是 Promise.prototype.then(undefined, onRejected) 的一种简写形式。 2.处理异常 因为是实例化生成前抛出的异常 要 catch 捕获实例化生成函数执行前 constructor(func) {const resolve (result) {if (this.state PENDING) {this.state FULFILLED;this.result result;this.#handlers.forEach(({ onFulfilled }) {onFulfilled(this.result);});}};const reject (result) {if (this.state PENDING) {this.state REJECTED;this.result result;this.#handlers.forEach(({ onRejected }) {onRejected(this.result);});}};try {func(resolve, reject);} catch (error) {reject(error);}}catch(onRejected) {return this.then(undefined, onRejected);} // 测试代码const p new MyPromise((resolve, reject) {reject(error);// throw error;// return p2;// return 2;// return new MyPromise((resolve, reject) {// resolve(OK);// // reject(ERROR);// }); }); p.then((res) {console.log(res:, res); }).catch((error) {console.log(err:, err); }); finally Promise 实例的 finally() 方法用于注册一个在 promise 敲定兑现或拒绝时调用的函数。它会立即返回一个等效的 Promise 对象这可以允许你链式调用其他 promise 方法。 finally() 方法类似于调用 then(onFinally, onFinally) 这可以让你避免在 promise 的 then() 和 catch() 处理器中重复编写代码。 onFinally 回调函数不接收任何参数。这种情况恰好适用于你不关心拒绝原因或兑现值的情况因此无需提供它。如果你想在 promise 敲定时进行一些处理或者清理无论其结果如何那么 finally() 方法会很有用。 finally(onFinally) {return this.then(onFinally, onFinally);} const p new MyPromise((resolve, reject) {reject(error);// throw error; }); p.then((res) {console.log(res:, res); }).catch((error) {console.log(err:, error);}).finally(() {console.log(一定执行);});静态方法 提供给promise静态的方法 包括以下6个 resloverejectraceallallsettledany reslove Promise.resolve() 静态方法将给定的值转换为一个 Promise。如果该值本身就是一个 Promise那么该 Promise 将被返回如果该值是一个 thenable 对象Promise.resolve() 将调用其 then() 方法及其两个回调函数否则返回的 Promise 将会以该值兑现 判断传入值promise直接返回转为promise并返回  fulfilled状态 thenable对象指的是具有then方法的对象。Promise.resolve方法会将这个对象转为Promise对象然后立即执行thenable对象的then方法 /*** 静态方法 resolve* 判断传入值* promise直接返回* 转为promise并返回 fulfilled状态*/static resolve(value) {if (value instanceof MyPromise) {return value;}return new MyPromise((resolve, reject) {resolve(value);});}// 测试代码// const p MyPromise.resolve( // new MyPromise((resolve, reject) { // resolve(ok); // // reject(error); // // throw error; // }) // ); const p MyPromise.resolve(贾公子); p.then((res) {console.log(res:, res);},(error) {console.log(err:, error);} ); reject Promise.reject() 静态方法返回一个已拒绝rejected的 Promise 对象拒绝原因为给定的参数。  static reject(value) {return new MyPromise((resolve, reject) {reject(value);});} // 测试代码 const p MyPromise.reject(贾公子); p.then((res) {console.log(res:, res);},(error) {console.log(err:, error);} ); race  Promise.race() 静态方法接受一个 promise 可迭代对象作为输入并返回一个 promise 这个返回的 promise 会随着第一个 promise 的敲定而敲定。 接收一个promise数组 返回的结果以第一个和promise返回的结果为准 * 返回promise * 判断是否为数组(Array.isArray) 错误信息  Argument is not iterable * 等待第一个敲定 (forEach取出每一个promise执行 一旦执行就改变状态resolve包装一层 因为有可能传递的不是promise) /*** 静态方法 race* 返回promise* 判断是否为数组 错误信息 Argument is not iterable* 等待第一个敲定*/static race(promises) {// 1.返回promisereturn new Promise((resolve, reject) {// 2.判断是否为数组 错误信息 Argument is not iterableif (!Array.isArray(promises)) {return reject(new TypeError(Argument is not iterable));}// 3.等待第一个敲定promises.forEach((p) {MyPromise.resolve(p).then((res) resolve(res),(err) reject(err));});});} }// 测试代码const p1 new MyPromise((resolve, reject) {setTimeout(() {resolve(ok);}, 2000); }); const p2 new MyPromise((resolve, reject) {setTimeout(() {reject(err);}, 1000); }); const p MyPromise.race([p1, p2]); // const p MyPromise.race(); p.then((res) {console.log(res:, res);},(error) {console.log(err:, error);} );all  Promise.all() 静态方法接受一个 Promise 可迭代对象作为输入并返回一个 Promise 。当所有输入的 Promise 都被兑现时返回的 Promise 也将被兑现即使传入的是一个空的可迭代对象并返回一个包含所有兑现值的数组。如果输入的任何 Promise 被拒绝则返回的 Promise 将被拒绝并带有第一个被拒绝的原因。 1.返回promise2.判断是否为数组 错误信息  Argument is not iterable3.空数组直接兑现4.判断全部兑现4.1记录结果(索引记录保证兑现顺序与传入顺序一样)4.2判断 全部兑现 (不能使用length 因为使用索引添加的可能导致没有全部兑现)5.处理第一个拒绝 static all(promises) {// 1.返回promisereturn new Promise((resolve, reject) {// 2.判断是否为数组 错误信息 Argument is not iterableif (!Array.isArray(promises)) {return reject(new TypeError(Argument is not iterable));}// 3.空数组直接兑现promises.length 0 resolve(promises);// 4.判断全部兑现const result [];let count 0;promises.forEach((p, index) {MyPromise.resolve(p).then((res) {// 4.1记录结果(索引记录保证兑现顺序与传入顺序一样)result[index] res;// 4.2判断 全部兑现 (不能使用length 因为使用索引添加的可能导致没有全部兑现)count;count promises.length resolve(result);},(err) {// 5.处理第一个拒绝reject(err);});});});}// 测试代码 const p1 MyPromise.resolve(1); const p2 new MyPromise((resolve, reject) {setTimeout(() {// resolve(ok);reject(err);}, 1000); }); const p3 贾公子; const p MyPromise.all([p1, p2, p3]); // const p MyPromise.all();、 // const p MyPromise.all([]);p.then((res) {console.log(res:, res);},(error) {console.log(err:, error);} );allSettled Promise.allSettled() 静态方法将一个 Promise 可迭代对象作为输入并返回一个单独的 promise。当所有输入的 Promise 都已敲定时包括传入空的可迭代对象时返回的 Promise 将被兑现并带有描述每个 Promise 结果的对象数组。 * 1.传入的promise都已敲定,即可获取兑现结果  *  2.结果数组: [{status: fulfilled, value: 1},{status: rejected, reason: err}]  *  3.结果数组的顺序,和传入的promise数组的顺序是一样的  *  4.空数组直接兑现  *  5.不为数组 错误信息  Argument is not iterable 1.返回promise  可以让结果继续.then 2.数组判断 不为数组直接抛出异常3.为空直接敲定  判断length4.等待全部敲定 使用forech 循环处理 利用resolve包装一下4.1记录结果(result) 记录敲定的次数(count 不使用push 会导致没有全部兑现4.2 处理兑现{ status: FULFILLED, value: res }4.3处理拒绝{ status: REJECTED, reason: err })成功或者失败都是resolve static allSettled(promises) {// 1.返回promisereturn new Promise((resolve, reject) {// 2.数组判断if (!Array.isArray(promises)) {return reject(new TypeError(Argument is not iterable));}// 3.为空直接敲定promises.length 0 resolve(promises);// 4.等待全部敲定const result [];let count 0;promises.forEach((p, index) {MyPromise.resolve(p).then((res) {// 4.1记录结果result[index] { status: FULFILLED, value: res }; // 4.2 处理兑现{ status: FULFILLED, value: res }// 记录敲定的次数count;// 不论成功失败都是resolvecount promises.length resolve(result);},(err) {// 4.1记录结果result[index] { status: REJECTED, reason: err }; // 4.3处理拒绝{ status: REJECTED, reason: err }// 记录敲定的次数count;// 不论成功失败都是resolvecount promises.length resolve(result);});});});} // 测试代码 const p1 MyPromise.resolve(1); const p2 new MyPromise((resolve, reject) {setTimeout(() {// resolve(ok);reject(err);}, 1000); }); const p3 贾公子; const p MyPromise.allSettled([p1, p2, p3]); // const p MyPromise.allSettled(); // const p MyPromise.allSettled([]);p.then((res) {console.log(res:, res);},(error) {console.log(err:, error);} ); any Promise.any() 静态方法将一个 Promise 可迭代对象作为输入并返回一个 promise 当输入的任何一个 Promise 兑现时这个返回的 Promise 将会兑现并返回第一个兑现的值。当所有输入 Promise 都被拒绝包括传递了空的可迭代对象时它会以一个包含拒绝原因数组的 AggregateErrorAggregateErrorAggregateError 拒绝。 AggregateError 对象代表了包装了多个错误对象的单个错误对象。当一个操作需要报告多个错误时例如 promise.any当传递给它的所有承诺都被拒绝时就会抛出该错误。 * 参数promise数组  * 结果  *    获取到第一个成功的结果  *    获取到所有拒绝失败的原因 AggregateError: All promises were rejected[拒绝原因1拒绝原因n]  *    传入空数组直接拒绝 AggregateError: All promises were rejected[]  *    不传入数组直接报错 1.返回promise 2.数组判断 错误信息 Argument is not iterable3.空数组直接拒绝 AggregateError([错误原因]All promises were rejected[)4.等待结果4.1第一个兑现4.2全部拒绝  static any(promises) {// 1.返回promisereturn new Promise((resolve, reject) {// 2.数组判断 错误信息 Argument is not iterableif (!Array.isArray(promises)) {return reject(new TypeError(Argument is not iterable));}// 3.空数组直接拒绝 AggregateError([错误原因]All promises were rejected[)promises.length 0 reject(new AggregateError(promises, All promises were rejected));const errors [];let count 0;// 4.等待结果promises.forEach((p, index) {MyPromise.resolve(p).then((res) {// 4.1第一个兑现resolve(res);},(err) {// 4.2全部拒绝errors[index] err;count;count promises.length reject(new AggregateError(errors, All promises were rejected));});});});} // 测试代码 const p1 new MyPromise((resolve, reject) {setTimeout(() {// resolve(ok);reject(err1);}, 1000); }); const p2 new MyPromise((resolve, reject) {setTimeout(() {// resolve(ok);reject(err2);}, 2000); }); // const p3 贾公子; const p3 MyPromise.reject(贾公子);const p MyPromise.any([p1, p2, p3]); // const p MyPromise.any(); // const p MyPromise.any([]);p.then((res) {console.log(res:, res);},(error) {// console.log(err:, error);console.dir(error);} );
http://www.sadfv.cn/news/22195/

相关文章:

  • vs2010网站开发教程wordpress 支付宝
  • 弄个做网站公司a站下载
  • 网站换空间怎么换pdf怎么做电子书下载网站
  • 企业邮箱多少钱一年网站建设 seo模块
  • 毕节城乡建设厅网站国外外贸平台有哪些
  • 网站内容与功能设计与实现的网站开发代做
  • 做网站有哪些项目竞价排名软件
  • 网站极简设计二次元风格wordpress模板
  • 网站怎样做优化推广网站广告有哪些
  • 通州手机网站建设广网站建设
  • 中英文双语的网站怎么建设vs做的网站源代码
  • 湖南网站建设 莫道生成图片的软件
  • 网站建设构造学习无锡找厂网站
  • 安徽哪家公司做网站比较好页面设计文献
  • 国外做文化的网站做网站销售工资怎么样
  • 中国大良网站建设wordpress 顺序
  • 如何美化网站怎么做网站优化
  • 网页微信二维码不能直接识别潍坊市网站优化
  • 有服务器做网站怎样建设公司的网站
  • 漯河网站建设兼职投资公司投资流程
  • 网站中的给我留言怎么做ipad网页制作软件
  • 做网站设计制作的国内高端大气的网站设计
  • 涪陵网站建设 优帮云那个网站能找到人
  • 子目录做网站深圳网站建设黄浦网络 骗钱
  • 做一般的公司网站需要多少钱wordpress怎么添加关键词
  • 郑州企业网站制作公司企业如何做网站
  • 模板下载网站源码 模板下载网站织梦模板招标网址网站大全
  • 方太产品站网站建设网站页面描述怎么写
  • 银狐鑫诺科技 网站建设网站没收录可以做推广吗
  • 四川省网站备案常德做网站公司