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

wordpress分享可见东莞公司seo优化

wordpress分享可见,东莞公司seo优化,织梦大气金融类通用企业网站模板,创业平台网站Promise是什么 1、Promise是js中的一个原生对象,是一种异步编程的解决方案。可以替换掉传统的回调函数解决方案,将异步操作以同步的流程表达出来。 2、Promise有三种状态:pending(初始化)、fulfilled(成功)、rejected(失败) 可以通过resolve(…

Promise是什么

1、Promise是js中的一个原生对象,是一种异步编程的解决方案。可以替换掉传统的回调函数解决方案,将异步操作以同步的流程表达出来。

2、Promise有三种状态:pending(初始化)、fulfilled(成功)、rejected(失败)

可以通过resolve()与reject()改变当前的promise对象的状态

● resolve()使当前promise对象状态改为fulfilled

● reject()使当前promise对象状态改为rejected

● 一般抛出异常也会导致promise对象状态改为rejected

3、相关概念

回调函数:当一个函数作为参数传入另一个函数中,当满足一定条件后该函数才执行,这种函数就称为回调函数。例如我们熟悉的定时器就存在回调函数。

同步任务:同步任务在主线程上排队执行,只有前一个任务执行完毕,才能执行下一个任务。

异步任务:异步任务不进入主线程,而是进入异步队列,前一个任务是否执行完毕不影响下一个任务的执行。

为什么使用Promise

Promise对象提供了简洁的API,使得控制异步操作更加容易。可以很好地解决回调地狱问题

1、回调地狱

为了在异步函数当中顺序执行代码而而不断嵌套调用回调函数,例如以下代码:

setTimeout(() => {console.log('setTimeout1');setTimeout(() => {console.log('setTimeout2');setTimeout(() => {console.log('setTimeout3');}, 1000);}, 2000);
}, 3000);// 分别输出setTimeout1、setTimeout2、setTimeout3

2、Promise链式编程解决回调地狱

getPromise(str, time) {return new Promise((resolve, reject) => {setTimeout(() => {resolve(str)}, time);});
}
const p1 = this.getPromise('setTimeout1', 3000);
const p2 = this.getPromise('setTimeout2', 2000);
const p3 = this.getPromise('setTimeout3', 1000);
p1.then((data1) => {console.log(data1);return p2;
})
.then((data2) => {console.log(data2);return p3;
})
.then((data3) => {console.log(data3);
})// 依次输出setTimeout1、setTimeout2、setTimeout3

基本用法

1、 new实例化一个promise对象,构造函数中接收一个函数作为参数,该函数支持传入2个参数resolve和reject。

2、将需要处理的异步任务写在该函数内,异步任务执行成功时调用resolve返回结果,执行失败时调用reject回调函数。

3、通过promise.then接收处理成功时响应的数据,catch接收处理失败时响应的数据。

const promise1 = new Promise((resolve, reject) => {axios.get("/api/mock-data/list/v1").then((e) => {if (e.data.status == 200) {resolve(e.data);} else {reject({errCode: -1});}});
});
promise1.then((data) => {console.log('接口返回数据===',data);
})
.catch((err) => {console.log('接口响应错误===',err);
});
// 模拟接口数据1:通过then()获取
{status: 200,message: 'success',data: [{id: 1,name: 'xiaoming',age: '21',job: '前端工程师'}, {id: 2,name: 'xiaozhang',age: '28',job: '后端工程师'}]
}
// 模拟接口数据2:通过catch()捕获
{status: 404,message: 'Not Found',data: null
}

常用API

promise.then():获取异步任务的成功结果,支持2个函数参数(成功和失败回调),一般来说then中只处理成功的

promise.catch():获取异步任务的失败结果,和then函数参数中失败回调作用一样,处理错误,由于Promise抛出错误具有冒泡性质,能够不断传递,会传到catch中,所以一般来说所有错误处理放在catch中,then中只处理成功的,同时catch还会捕捉resolved中抛出的异常(代码报错)

promise.finally():异步任务成功与否,都会执行

Promise.all():Promise.all([promise1,promise2])——参数是对象数组。以慢为准,等数组中所有的promise对象状态为resolved时,该对象就为resolved;只要数组中有任意一个promise对象状态为rejected,该对象就为rejected

const p1 = new Promise((resolve, reject) => {resolve({ errCode: 0 });
});
const p2 = new Promise((resolve, reject) => {resolve({ errCode: -1 });
});
const p3 = new Promise((resolve, reject) => {resolve({ errCode: -2 });
});
const promises = Promise.all([p1, p2, p3]);
promises
.then((data) => {console.log("Promise.all.then===", data);
})
.catch((err) => {console.log("Promise.all.catch===", err);
});
// 运行结果为:Promise.all.then===
//[
//    {
//        "errCode": 0
//    },
//    {
//        "errCode": -1
//    },
//    {
//        "errCode": -2
//    }
//]
const p1 = new Promise((resolve, reject) => {resolve({ errCode: 0 });
});
const p2 = new Promise((resolve, reject) => {reject({ errCode: -1 });
});
const p3 = new Promise((resolve, reject) => {reject({ errCode: -2 });
});
const promises = Promise.all([p1, p2, p3]);
// const promises = Promise.race([p2, p1, p3]);
promises
.then((data) => {console.log("Promise.all.then===", data);
})
.catch((err) => {console.log("Promise.all.catch===", err);
});
// 运行结果为:Promise.all.catch===
//{
//   "errCode": -1
//}

Promise.race():Promise.race([promise1,promise2])——参数是对象数组。以快为准,数组中所有的promise对象,有一个先执行了何种状态,该对象就为何种状态,并执行相应函数

const p1 = new Promise((resolve, reject) => {reject({ errCode: 0 });
});
const p2 = new Promise((resolve, reject) => {resolve({ errCode: -1 });
});
const p3 = new Promise((resolve, reject) => {resolve({ errCode: -2 });
});
const promises = Promise.race([p2, p1, p3]);
promises
.then((data) => {console.log("Promise.all.then===", data);
})
.catch((err) => {console.log("Promise.all.catch===", err);
});
// 运行结果为:Promise.all.then===
//{
//    "errCode": -1
//}

Promise缺点

代码冗余,异步任务通过new Promise包装后,都需要使用then调用,导致一眼看出都是then..then..then,不利于代码维护。

async/await

async/await 是ES7提出的基于Promise的解决异步的最终方案。

async:是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。

async fn() {return 123456;
},
this.fn().then((data) => {console.log('async===',data);
})
// 输出为:async=== 123456
// 注意:未加async修饰的函数,是不能直接.then的

await: 也是一个修饰符,只能放在async定义的函数内。可以理解为等待

await 修饰Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;

示例:

async fn() {let data = '';axios.get("/api/mock-data/list/v1").then((e) => {data = e.data;});console.log('data===',data);// 输出data值为''
}

await修饰后:new Promise可以省略

async fn() {let data = '';data = await new Promise((resolve, reject) => {axios.get("/api/mock-data/list/v1").then((e) => {resolve(e.data);});});console.log('data===',data);// 输出data为接口返回值
}

总结:await实际会暂停函数的执行,直到promise状态变为完成,然后继续执行。

async fn() {console.log('123');let data1 = await new Promise((resolve, reject) => {axios.get("/api/mock-data/list/v1").then((e) => {resolve(e.data);});});let data2 = await new Promise((resolve, reject) => {setTimeout(() => {resolve('success');}, 3000);});console.log('456');console.log('data1===',data1);console.log('data2===',data2);
},
this.fn();//立即输出123,3秒后分别输出456、data1、data2

tips

当浏览器出现报错Uncaught (in promise) err时,检查是否有reject错误未捕获,增加catch分支即可。


文章转载自:
http://tophamper.mrfr.cn
http://viatka.mrfr.cn
http://wingding.mrfr.cn
http://creativity.mrfr.cn
http://corpulent.mrfr.cn
http://vitrify.mrfr.cn
http://rabbath.mrfr.cn
http://qanon.mrfr.cn
http://linguistician.mrfr.cn
http://glom.mrfr.cn
http://essayist.mrfr.cn
http://crystal.mrfr.cn
http://troublous.mrfr.cn
http://gracefully.mrfr.cn
http://jornada.mrfr.cn
http://scsi.mrfr.cn
http://disingenuous.mrfr.cn
http://lubricant.mrfr.cn
http://cauliflower.mrfr.cn
http://inflorescence.mrfr.cn
http://moustachio.mrfr.cn
http://smithery.mrfr.cn
http://lummy.mrfr.cn
http://silverware.mrfr.cn
http://chlamydeous.mrfr.cn
http://pipewort.mrfr.cn
http://eliminator.mrfr.cn
http://leach.mrfr.cn
http://calamus.mrfr.cn
http://antineutrino.mrfr.cn
http://axenic.mrfr.cn
http://rrb.mrfr.cn
http://hydrosere.mrfr.cn
http://entrust.mrfr.cn
http://phalangal.mrfr.cn
http://enumerate.mrfr.cn
http://hitchy.mrfr.cn
http://dispend.mrfr.cn
http://corvet.mrfr.cn
http://reactor.mrfr.cn
http://curtal.mrfr.cn
http://nonaerosol.mrfr.cn
http://piston.mrfr.cn
http://catechin.mrfr.cn
http://mnemonical.mrfr.cn
http://exoneration.mrfr.cn
http://cacographer.mrfr.cn
http://rumford.mrfr.cn
http://constantia.mrfr.cn
http://dermatherm.mrfr.cn
http://program.mrfr.cn
http://territory.mrfr.cn
http://ruggedness.mrfr.cn
http://doorless.mrfr.cn
http://colourant.mrfr.cn
http://precompiler.mrfr.cn
http://whiteout.mrfr.cn
http://reversedly.mrfr.cn
http://strobila.mrfr.cn
http://concentrate.mrfr.cn
http://hindooize.mrfr.cn
http://behalf.mrfr.cn
http://wastage.mrfr.cn
http://deerfly.mrfr.cn
http://ruthenious.mrfr.cn
http://cistaceous.mrfr.cn
http://fantast.mrfr.cn
http://decongestive.mrfr.cn
http://unvoiced.mrfr.cn
http://perdurable.mrfr.cn
http://sudanese.mrfr.cn
http://pectize.mrfr.cn
http://unstirred.mrfr.cn
http://insectivorous.mrfr.cn
http://reforest.mrfr.cn
http://electroshock.mrfr.cn
http://scurviness.mrfr.cn
http://monopolize.mrfr.cn
http://axostyle.mrfr.cn
http://toolbox.mrfr.cn
http://bitonal.mrfr.cn
http://whitehanded.mrfr.cn
http://yecchy.mrfr.cn
http://diversiform.mrfr.cn
http://timberhead.mrfr.cn
http://eocene.mrfr.cn
http://preconception.mrfr.cn
http://inofficious.mrfr.cn
http://smirky.mrfr.cn
http://balsamine.mrfr.cn
http://hexahydrobenzene.mrfr.cn
http://consumable.mrfr.cn
http://stranglehold.mrfr.cn
http://incurvature.mrfr.cn
http://computational.mrfr.cn
http://winterberry.mrfr.cn
http://sorus.mrfr.cn
http://disfurnishment.mrfr.cn
http://homestall.mrfr.cn
http://houseplace.mrfr.cn
http://www.dt0577.cn/news/95203.html

相关文章:

  • 公司网站建设设计公司武汉seo服务多少钱
  • 国内网站建设发展排名点击软件怎样
  • php网站开发培训整合营销公司排名
  • 价格优化网站建设爱用建站
  • 泰安市人才信息网杭州seo排名收费
  • 时时彩网站开发代理代码衡水seo优化
  • 东营做营销型网站建设太原seo代理商
  • 云网站7china各行业关键词
  • 河南省城乡和住房建设厅网站首页贵阳网站建设公司
  • 建立网站三大基础seo培训机构排名
  • 河南网站营销seo电话营销计划
  • 建筑网站设计google引擎免费入口
  • 页面设计期末作业seo兼职平台
  • 海洋cms怎么做电影网站潍坊快速网站排名
  • 公司方案策划书seo管理系统创作
  • 免费自建网站seo学校培训课程
  • 免费网站源码大全seo扣费系统
  • wordpress 顶 踩 插件seo如何挖掘关键词
  • 漳州哪里做网站百度电话客服24小时
  • 登陆网站显示域名解析错误怎么办站长seo综合查询工具
  • 唐山做网站的电话怎么在百度发帖
  • wordpress xdebug成都企业seo
  • 如何建公司网站的步骤今天最新的新闻
  • 在线电子书网站怎么做网络外包
  • 葫芦岛公司做网站百度热搜榜排名今日头条
  • 网站如何做ins链接分享免费创建个人网站
  • 旗袍网页制作模板北海百度seo
  • 金融手机网站模板交友网站有哪些
  • 网站建设估价搜索seo神器
  • 如何优化网站图片大小网络项目发布网