版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第JS中promise特点与信任问题解决目录1.Promise的信任问题1.1信任问题1.2信任问题产生的原因1.2.1调用过早1.2.2调用过晚1.2.3回调未调用1.2.4调用次数过少或过多1.2.5未传递参数、环境值####1.2.6吞掉错误和异常2.Promise的几个关键问题2.1怎么改变Promise的状态2.2Promise指定多个回调2.3Promise改变状态与指定回调的顺序问题2.4Promise.then方法的返回结果特点2.5异常穿透总结
1.Promise的信任问题
1.1信任问题
所谓的信任问题就是你给出事物逻辑,将逻辑处理交给第三方解决
(即回调函数),此时会出现第三方给出的数据结果不是你希望的那样。
比如重复调用,没掉用。下次你在使用它是就会产生信任问题
1.2信任问题产生的原因
1.2.1调用过早
这个问题主要是担心代码是否会引入类似于Zlago这样的副作用一种JavaScript开发人员虚构的疯狂恶魔,取名Zalgo,**用来描述JavaScript中同步/异步的混乱**即一个任务有时异步操作,有是同步操作,可能会导致竞态条件
Promise解决
promise即使是立刻完成,也无法被立刻调用。根据Promise特性可知道
要想看到结果必须通过==.then调用==
也就是将结果统一成异步操作
1.2.2调用过晚
一个同步任务链无法按照上面的形式运行,即在任务链中,下一个任务,不一定
是在上一个任务被完全调度后在运行的。即按照预期有效的延迟另一个回调的发生
Promise解决
只要是通过then注册的回调都会下一个异步时机点发生时依次被调用。
回调中的任何一个都无法影响任何一个或延迟对其他回调的运用
eg:
p.then(function(){
p.then(function(){
console.log("c")
console.log("A")
p.then(function(){
console.log("B")
输出结果是**A,B,C**
1.2.3回调未调用
产生原因:回调函数有js语法错误等
Promise解决
可通过p.catch()获取错误信息,因为即使回调函数中有错误,回调函数还是会被调用
可通过下面的方式解决
functiontimeout(delay){
returnnewPromise(function(resolve,reject){
setTimeout(function(){
reject('Timeout!')
},delay)
Promise.race([
foo(),
timeout(3000)
]).then(
function(){
//foo(...)及时完成
function(err){
//foo(...)被拒绝,或者没按时完成
1.2.4调用次数过少或过多
调用次数过少就是没有调用
Promise解决
Promise只能进行一次决议,所以任何通过then()注册的回调都只会调用一次
1.2.5未传递参数、环境值
回调函数不知道处理那些数据,以及改怎么执行
Promise解决
如果你没有用任何值显式决议,默认用undefined代替
####1.2.6吞掉错误和异常
回调函数出现错误和异常时在某种情况下,不向外抛出提示
2.Promise的几个关键问题
2.1怎么改变Promise的状态
通过resolve()
resolve('ok');//pending=fulfilled(resolved)
通过reject()
reject("error");//pending=rejected
2.2Promise指定多个回调
一个promise对象通过多个==.then()==调用
eg:
letp=newPromise((resolve,reject)={
//resolve('OK');
///指定回调-1
p.then(value={
console.log(value);
//指定回调-2
p.then(value={
alert(value);
结果是可以的
会先出现alert()弹框,后控制台打印
2.3Promise改变状态与指定回调的顺序问题
都有可能一般先指定回调后改变状态
先改变状态后指定回调的方法如下,也可以通过reject()或resolve()
letp=newPromise((resolve,reject)={
setTimeout(()={
resolve("OK");
},2000);
p.then(
(value)={
console.log(value);
(reason)={
console.log(reason);
2.4Promise.then方法的返回结果特点
如果执行then方法返回的是非Promise对象
新promise变为resolved,value为返回的值
letp=newPromise((resolve,reject)={
resolve('ok');
letresult=p.then(value={
console.log(value);
//返回结果是非Promise类型的对象
return521;
},reason={
console.warn(reason);
console.log(result);
如果抛出异常,新promise变为rejected,reason为抛出的异常
如果返回的是另一个新promise,此promise的结果就会成为新promise的结果
letp=newPromise((resolve,reject)={
resolve("ok");
//执行then方法
letresult=p.then(
(value)={
console.log(value);
//3.返回结果是Promise对象
returnnewPromise((resolve,reject)={
resolve('success');
//reject('error');
(reason)={
console.warn(reason);
console.log(result);
2.5异常穿透
当使用promise的then链式调用时,可以在最后指定失败的回调,
前面任何操作出了异常,都会传到最后失败的回调中处理
letp=newPromise((resolve,reject)={
setTimeout(()={
resolve('OK');
//reject('Err');
},1000);
p.then(value={
//console.log(111);
throw'失败啦!';
}).then(value={
console.log(22
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南充科技职业学院单招职业技能测试题库及答案详解一套
- 2026年包头铁道职业技术学院单招职业技能考试题库带答案详解(a卷)
- 花艺环境设计师安全演练测试考核试卷含答案
- 感光材料乳剂熔化工班组管理考核试卷含答案
- 出河机司机复试能力考核试卷含答案
- 合成树脂生产工安全防护强化考核试卷含答案
- 生猪屠宰加工工7S考核试卷含答案
- 珂罗版制版员岗前冲突解决考核试卷含答案
- 妇女职业规划方案
- 乙烯-乙烯醇树脂装置操作工安全宣教水平考核试卷含答案
- 2026辽宁大连长兴岛经济技术开发区国有企业招聘渔港港站管理人员24人笔试备考试题及答案解析
- 2025年山东圣翰财贸职业学院单招职业技能考试模拟测试卷带答案解析
- GB 6441-2025生产安全事故分类与编码
- 湖北2025年湖北省京剧院招聘笔试历年参考题库附带答案详解
- 农业物资:2024年化肥农药销售合同模板
- 2024年03月深圳市深汕特别合作区机关事业单位2024年公开招考46名事务员笔试历年典型考题及考点研判与答案解析
- 2024北京背户车协议书范本
- 巨量引擎推广引流方案
- 中国美食菜谱大全
- 盘扣架安全施工方案审核要点
- 法律、法规识别与管理制度
评论
0/150
提交评论