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

ps做网站连接浙江外贸网站建设

ps做网站连接,浙江外贸网站建设,wordpress把头像改为QQ头像,知名电子商务网站一、什么是Promise 在Promise A规范中规定,Promise是一个有一个符合规范的then方法的对象或者函数。 1.关于then then接收onFulfilled和onRejected两个可选参数;then必须返回一个新的Promise对象;如果onFulfilled是一个函数 在状态切换为f…

一、什么是Promise

在Promise A+规范中规定,Promise是一个有一个符合规范的then方法的对象或者函数。

1.关于then

  • then接收onFulfilled和onRejected两个可选参数;
  • then必须返回一个新的Promise对象;
  • 如果onFulfilled是一个函数
    • 在状态切换为fulfilled之后调用;
    • 不能被多次调用。
  • 如果onRejected是一个函数
    • 在状态切换为rejected是被调用;
    • 不能被多次调用。

2.状态

  • pending: 初始状态,会转换为下面的俩个状态;
  • fulfilled: 成功状态,不会再转为其他状态;
  • rejected: 失败状态,不会再转为其他状态。

3.关于ES6中的Promise

  • 构造函数接受一个回调函数executor;
  • executor接受两个参数resolve、reject;
  • executor在new Promise是被同步调用;
  • 任务被解决时,调用resolve,并传入结果;
  • 任务被拒绝时,调用reject,并传入拒绝原因;
  • Promise对象除了then还有catch和finally两个函数;
  • Promise有all、resolve等静态函数。

二、实现

1.状态定义

const PENDING = 'pending';
const FULFILLED = 'fulfilled';
const REJECTED = 'rejected';

2.功能实现

class MyPromise {// 当前状态#state = PENDING;// 解决或拒绝的结果#result = undefined;// 通关连环then注册的回调#handlers = [];// 构造函数constructor(executor) {// 定义两个状态切换函数const resolve = (data) => {this.#setState(FULFILLED, data);};const reject = (reason) => {this.#setState(REJECTED, reason);};// 同步调用参数函数try {executor(resolve, reject);} catch (error) {reject(error);}}// 状态切换#setState(state, result) {if (this.#state !== PENDING) return;this.#state = state;this.#result = result;this.#run();}// 执行then注册的所有任务#run() {if (this.#state === PENDING) return;// 遍历所有注册的回调while(this.#handlers.length > 0){const handler = this.#handlers.shift();const {resolve, reject, onFulfilled, onRejected} = handler;// 根据结果执行每个任务if (this.#state === FULFILLED) {this.#runOne(onFulfilled, resolve, reject);} else if (this.#state === REJECTED) {this.#runOne(onRejected, resolve, reject);}}}// 执行一个任务#runOne() {// 将任务放入微队列,等待被执行this.#runMicroTask(() => {if (typeof callback !== 'function') {// 不是函数的话,透传一下当前结果if (this.#state === FULFILLED) {resolve(this.#result);} else {reject(this.#result);}return;}try {const data = callback(this.#result);if (this.#isPromiseLike(data)) {// 结果是Priomise的话data.then(resolve, reject);} else {// 不是Promise的话直接完成,并传递结果resolve(data);}} catch (error) {reject(error);}});}// 按Promise A+规范判断参数是否是一个Promise#isPromiseLike(value) {if (value !== null && (typeof value === 'object' || typeof value === 'function')) {return typeof value.then === 'function';}return false;}// 将任务放入微队列#runMicroTask(func) {if (typeof process === 'object' && typeof process.nextTick === 'function') {// 在nodejs中process.nextTick(func);} else if (typeof MutationObserver === 'function') {// 在浏览器中const textNode = document.createTextNode('1');const ob = new MutationObserver(func);// 让ob观察textNode的字符串变化,观察到之后会将构造函数// 中传入的func加入微队列执行ob.observe(textNode, {characterData: true,});textNode.data = '2';} else {// 没有上述环境,只能用宏队列代替了setTimeout(func, 0);}}then(onFulfilled, onRejected) {// 返回新Promisereturn new MyPromise((resolve, reject) => {// 将任务存起来this.#handlers.push({resolve,reject,onFulfilled,onRejected,});this.#run();});}
}

http://www.yayakq.cn/news/848418/

相关文章:

  • 建定制营销型网站网络产品代理加盟
  • 放置文件seo综合查询是什么
  • 网站访问统计 曲线图深圳防疫最新情况实时
  • 建设网站目录网店美工的岗位职责
  • 关于网站开发中网站上传在网站里怎么做图片超链接
  • 网站设计提成多少钱设计图案
  • 网站开发蓝云企业网站建设公司郑州
  • 传奇免费网站模板下载网站建设好处
  • 国展做网站的公司没有文章更新的网站怎么做优化
  • 网站策划主要做什么工作山东网站开发网络公司
  • 如何拿高权重网站外链进行互换?wordpress 获取文章数量
  • 电子政务门户网站建设部署wordpress后访问空白页
  • 上海网站制作公司的排名简单好玩的网页游戏
  • 手机网站二级域名西安做小程序的公司
  • 网站优化平台有哪些天长街道两学一做网站
  • 房地产开发公司网站源码活动策划方案
  • 唐山石家庄做网站哪家好营销型网站建设网站
  • 电商的网站怎么做的怎样做音视频宣传网站
  • 重庆建新建设工程有限公司网站长春火车站在哪
  • 网站建设资讯英文手机商城网站建设
  • 导购网站 转化率做全景的h5网站
  • 内部网站 建设目标教育网站前置审批
  • wordpress打开最快的网站宣传片制作公司简介
  • 外贸企业网站推广品牌推广名词解释
  • 绍兴市住房和城乡建设局网站那些网站可以接私活做
  • 品牌网站建设方案ppt网站色调搭配
  • 凡科做网站有什么用泉州做网站便宜
  • 宁夏干部网络教育培训学院seo互联网营销培训
  • 网站搜索框设计怎么制作小程序卖东西
  • 建筑工具网站wordpress图片文件夹更换