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

建站为应用技术开源wordpress主题

建站为应用技术,开源wordpress主题,苏州百度seo,百度seo整站优化目录 异步和同步 异步的问题 new Promise语法 promise的状态 promise.then() Promise.resolve() Promise.reject() Promise.all() Promise.race() Promise.catch() Promise.finally() 异步和同步 同步模式下,代码按顺序执行,前一条执行完毕后…

目录

异步和同步

异步的问题

new Promise语法

promise的状态

promise.then()

Promise.resolve()

Promise.reject()

Promise.all()

Promise.race()

Promise.catch()

Promise.finally()


异步和同步

同步模式下,代码按顺序执行,前一条执行完毕后,进行后一条的执行。

异步模式下,代码可以不按顺序执行,不同行的代码可以同时执行。

异步的问题

有时,一条代码需要一个异步操作的返回值才能进行计算,这就会导致回调问题,promise语法可以优雅地解决回调。

new Promise语法

new Promise用于创建Promise实例,其参数是一个函数。

const demo = new Promise( ( resolve, reject )=>{if(){...resolve();    }if(){...reject();}}
)

作为参数的函数接收两个参数。为resolve和reject(参数名可以修改,但一般都用resolve和reject),resolve和reject也为函数。

promise的状态

promise实例具有三个状态:成功(fulfilled,但有时也叫resolved)、失败、待定。

当调用resolve()函数时,promise的状态会变成成功。

当调用reject()函数时,promise的状态会变为失败。

当promise的状态为成功或失败时,会进入Promise.then()。

在new Promise中,若调用throw,会触发reject状态。

        let a = new Promise((resolve,reject)=>{throw Error('error!');});console.log(a);

promise.then()

接收两个参数,第一个参数是promise状态变为成功时,执行的函数,第二个参数是promise状态为失败时调用的函数。

demo.then(()=>{//如果resolve被触发,执行的函数},()=>{//如果reject被触发,执行的函数}
)

传参

在new Promise参数函数中,reject和resolve可以传递参数,在.then对应的处理函数中,可以获得这个参数,且两个参数的名称不需要对应。

    const demo = new Promise( ( resolve, reject )=>{if(){...resolve(num1);    }if(){...reject(num2);}}).then((resolveData)=>{...},(rejectData)=>{})

.then中的参数名resolveData和rejectData是可以修改的,这里只是随便起的名字,不是一定要叫这个。

Promise.resolve()

Promise.resolve()方法返回一个Promise对象。

Promise.resolve的参数为非Promise参数时,其返回的Promise对象状态为成功,值为传入的参数。

若Promise.resolve的参数为Promise参数,其返回的Promise对象的状态与值,取决于参数Promise。

        let a = Promise.resolve(1);let b = Promise.resolve(function(){return 1+1;});let c = Promise.resolve(new Promise((resolve,reject)=>{reject();}));console.log(a);console.log(b);console.log(c);

Promise.reject()

与Promise.resolve()类似。

但与resolve不同的是,不管传入的参数如何,返回的Promise状态都是失败。

传入的参数是什么,该参数的返回值会成为返回的Promise的值。

即使传入的参数是成功的Promise对象,返回值也是失败的Promise。

        let a = Promise.reject(new Promise((resolve,reject)=>{resolve("resolve!!!");}));console.log(a);

当传入的参数是成功的Promise,这个Promise会作为失败Promise的值。但返回的Promise状态仍然是失败。

当传入的参数是失败的Promise,整个失败的Promise会作为返回的Promise的值。

        let a = Promise.reject(new Promise((resolve,reject)=>{reject("reject!!!");}));console.log(a);

Promise.all()

Promise.all()方法接收一个数组。

该数组一般情况下,其中每一个元素都是Promise。

其返回的结果也是Promise,只有当数组中所有的Promise都成功时,才返回成功,成功的结果是每个Promise对象成功结果组成的一个数组,否则返回失败,失败的结果是第一个失败的Promise的结果。

Promise全成功的情况下:

若传入的参数不是Promise,则该参数会被视为成功值。

        let p1 = Promise.resolve(1);let p2 = 2;let p3 = Promise.resolve(3);let p4 = new Promise((resolve,reject)=>{resolve('ok');});let a = Promise.all([p1,p2,p3,p4]);console.log(a);

有失败Promise的情况下:

        let p1 = Promise.resolve(1);let p2 = 2;let p3 = Promise.reject(3);let p4 = new Promise((resolve,reject)=>{resolve('ok');});let p5 = new Promise((resolve,reject)=>{reject('reject');})let a = Promise.all([p1,p2,p3,p4,p5]);console.log(a);

Promise.race()

Promise.race()方法接收一个数组。

该数组一般也都由Promise组成。返回值为第一个改变状态的Promise。

当数组元素为非Promise结构时,该非Promise结构会被视为成功的Promise并返回。

        let p1 = Promise.resolve(1);let p2 = null;let p3 = Promise.reject(3);let p4 = new Promise((resolve,reject)=>{resolve('ok');});let p5 = new Promise((resolve,reject)=>{reject('reject');})let a = Promise.race([p2,p1]);

Promise.catch()

Promise.catch()的语法有点像语法糖。

Promise.catch(reject)从语法上讲,相当于promise.then(null, reject),这里的reject都是指处理reject状态的回调函数。

.catch返回值也是一个Promise。

Promise.finally()

Promise.finally()方法,不论Promise的状态是成功还是失败,在最后都会调用finally中的方法。

finally可以用于处理不论返回结果如何,都需要执行的逻辑,可以避免代码冗余。

finally接收的是一个函数。

finally的返回值是一个新的Promise实例对象。

该对象的状态一般是父Promise状态的传递。父Promise是指promise.finally中,promise对应的实例。但当finally的返回值是显式reject或pending Promise时,返回值是reject或pending。

下例中,pTest的返回值是一个状态为失败的Promise,调用pTest时,虽然finally参数的返回值是成功的promise,但是由于该promise的状态不是失败或待定,所以finally的返回值取决于父Promise,即pTest。

        let pTest = new Promise((resolve,reject)=>{reject('error');});console.log(pTest.finally( ()=>{return new Promise((resolve,reject)=>{resolve('ok');})}));

但若finally参数返回的是reject或者pending,则返回值取决于参数。

参数返回reject的情况下:

        let pTest = new Promise((resolve,reject)=>{reject('error');});console.log(pTest.finally( ()=>{return new Promise((resolve,reject)=>{reject('reject');})}));

参数返回panding的情况下:

        let pTest = new Promise((resolve,reject)=>{reject('error');});console.log(pTest.finally( ()=>{return new Promise((resolve,reject)=>{})}));

http://www.dtcms.com/wzjs/789670.html

相关文章:

  • 南昌网站建设公司哪家好做淘宝客的网站需要备案吗
  • 鞍山制作公司网站的公司佛山微网站建设报价
  • 网站的后缀名邢台seo技术
  • 网页设计网站建设的书籍河南省财政厅经济建设网站
  • 临沂企业建站系统深圳十佳工业设计公司有哪些
  • 网站建设的方案实施包括网页制作软件案例
  • 建立网站的步骤网站搜索算法
  • php网站源码建设教程农林网站建设
  • python做网站原理wordpress主题lightsns
  • 太仓新网站优化仿视频网站开发
  • 做网站能收多少广告费济南网站建设飞鸟
  • 商城网站建设怎么建设网站开发技术岗位职责
  • 网站开发所需要的的环境重庆网站建设制作设计公司
  • 设置网站标签织梦 图片网站源码
  • 北京免备案网站建设项目经理资格证
  • 自己做网站服务器的备案方法关键词整站优化公司
  • 企业网站建设可行分析南宁网站建设gxskm
  • 重庆长寿网站设计公司哪家好太原顶呱呱做网站地址电话
  • 罗湖外贸网站建设上海设计公司招聘
  • 北京网络网站推广国外网站做网上生意哪个好
  • 响应式网站项目如何下载ppt免费模板
  • 中式设计网站推荐怎样优化网站自然排名
  • 弄一个电影网站怎么做惠州服务类营销方案
  • 整站关键词快速排名手机qq网页版网站
  • 学校网站建设代码东莞中高风险地区
  • 网站做系统叫什么名字海南省建设网站
  • 汕头网站设计电话渠道策略的四种方式
  • 衡阳有线宽带网站网站源码带手机版
  • 网站建设流程包括哪些环节网站交互主要做什么的
  • 驻马店住房和城乡建设部网站360网站卫士代备案流程