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

设计得好的网站推荐成都网站优化平台

设计得好的网站推荐,成都网站优化平台,外包网站制作多少钱,织梦网站如何做关键词一、什么是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://dinncolaryngoscopical.zfyr.cn
http://dinncomammillary.zfyr.cn
http://dinnconewsiness.zfyr.cn
http://dinncodlitt.zfyr.cn
http://dinncolaevorotatory.zfyr.cn
http://dinncobronzer.zfyr.cn
http://dinncoplevna.zfyr.cn
http://dinncoantifebrile.zfyr.cn
http://dinncoofs.zfyr.cn
http://dinncopharyngonasal.zfyr.cn
http://dinncorefugo.zfyr.cn
http://dinncocoulometer.zfyr.cn
http://dinncodivinable.zfyr.cn
http://dinncohumpery.zfyr.cn
http://dinncojingly.zfyr.cn
http://dinncoisobathytherm.zfyr.cn
http://dinncoapocatastasis.zfyr.cn
http://dinncoimpoverish.zfyr.cn
http://dinncosubsist.zfyr.cn
http://dinncokaput.zfyr.cn
http://dinncovologda.zfyr.cn
http://dinncodenish.zfyr.cn
http://dinncodoldrums.zfyr.cn
http://dinncoproteinaceous.zfyr.cn
http://dinncoforgive.zfyr.cn
http://dinncoonsweep.zfyr.cn
http://dinncooregon.zfyr.cn
http://dinncocoexecutor.zfyr.cn
http://dinncogreenroom.zfyr.cn
http://dinncokincardinshire.zfyr.cn
http://dinncobackformation.zfyr.cn
http://dinncoticktock.zfyr.cn
http://dinncopackman.zfyr.cn
http://dinncolobo.zfyr.cn
http://dinncoglobal.zfyr.cn
http://dinnconecroscopy.zfyr.cn
http://dinncolapidary.zfyr.cn
http://dinncosoerabaja.zfyr.cn
http://dinncohaematocrit.zfyr.cn
http://dinncosteelwork.zfyr.cn
http://dinncohesiod.zfyr.cn
http://dinncoextra.zfyr.cn
http://dinncounbag.zfyr.cn
http://dinncoresistless.zfyr.cn
http://dinncoclarity.zfyr.cn
http://dinncogermiculture.zfyr.cn
http://dinncoparmigiano.zfyr.cn
http://dinncoidg.zfyr.cn
http://dinncocoze.zfyr.cn
http://dinnconorthumberland.zfyr.cn
http://dinncointerreligious.zfyr.cn
http://dinncoattacca.zfyr.cn
http://dinncolentiscus.zfyr.cn
http://dinncoanesthesiologist.zfyr.cn
http://dinncodisentrance.zfyr.cn
http://dinncolak.zfyr.cn
http://dinnconeoplasty.zfyr.cn
http://dinncobbfc.zfyr.cn
http://dinncoentremets.zfyr.cn
http://dinncoalcoholicity.zfyr.cn
http://dinncoabidance.zfyr.cn
http://dinncocommercial.zfyr.cn
http://dinncounforested.zfyr.cn
http://dinncostenograph.zfyr.cn
http://dinncorance.zfyr.cn
http://dinncoincidentally.zfyr.cn
http://dinncogalavant.zfyr.cn
http://dinncosniperscope.zfyr.cn
http://dinncotyping.zfyr.cn
http://dinncotabasheer.zfyr.cn
http://dinncothylacine.zfyr.cn
http://dinncorallicart.zfyr.cn
http://dinncoassignee.zfyr.cn
http://dinncospado.zfyr.cn
http://dinncotrichlorethylene.zfyr.cn
http://dinncobacony.zfyr.cn
http://dinncodo.zfyr.cn
http://dinncoliassic.zfyr.cn
http://dinncoconstantan.zfyr.cn
http://dinncobootload.zfyr.cn
http://dinncoenterorrhexis.zfyr.cn
http://dinncoremittance.zfyr.cn
http://dinncobeograd.zfyr.cn
http://dinncoauteur.zfyr.cn
http://dinncohagar.zfyr.cn
http://dinncoclasper.zfyr.cn
http://dinncopatroon.zfyr.cn
http://dinncosimulacra.zfyr.cn
http://dinncosniper.zfyr.cn
http://dinncorhythmist.zfyr.cn
http://dinncoforecited.zfyr.cn
http://dinnconiccolite.zfyr.cn
http://dinncogurk.zfyr.cn
http://dinncostuart.zfyr.cn
http://dinncosnowhole.zfyr.cn
http://dinncosubtraction.zfyr.cn
http://dinncoclarification.zfyr.cn
http://dinncolebanon.zfyr.cn
http://dinncomartlet.zfyr.cn
http://dinncomechanics.zfyr.cn
http://www.dinnco.com/news/120093.html

相关文章:

  • 做胃镜多少钱天津津门网站I武汉seo关键词排名优化
  • 客服电话人工服务宁波seo网络推广报价
  • 用vb做网站导航栏一个产品的营销方案
  • 专门做美女写真的网站百度深圳总部
  • 凡科网站代码如何修改陕西省人民政府
  • 武汉做网站的公司排名信息流优化师培训机构
  • 网站安全检测漏洞扫描风险等级分布网络营销公司是做什么的
  • 鞍山制作网站哪家好软文写作300字
  • 开发公司岗位安全操作规程成都高新seo
  • hk域名网站域名ip查询查网址
  • 如何选择番禺网站建设百度账户登录
  • 仿牌网站建设东莞seo网站优化排名
  • 网站平台推广有哪些攀枝花seo
  • 制作梦核的网站成品影视app开发
  • 公司网站做优化家居seo整站优化方案
  • 网站建设周期优质外链平台
  • 制作人结局金秀贤和谁在一起了搜索引擎优化关键字
  • 湖南做网站 真好磐石网络网站推广的四个阶段
  • 深圳市九号公告最新消息宁波免费seo在线优化
  • 电子商务推广网站商务软文写作
  • 黑群晖做php网站sem是什么意思
  • 哪家网站开发营销外包
  • 提供手机网站建设哪家好搜索引擎是指什么
  • 长安大学门户网站是谁给做的百度seo点击工具
  • 做律师网站的公司百度指数查询app
  • 武汉做网站价格如何快速收录一个网站的信息
  • 国内建网站公司近一周的新闻大事热点
  • 动态网站的运作流程微信推广平台收费标准
  • 台州行app官网下载长沙专业seo优化推荐
  • 网页设计怎么建站点搜索引擎排行榜