From b15e9e58c26179395af6a714d70c3938ff4ff963 Mon Sep 17 00:00:00 2001 From: kangkai <kangk26@foxmail.com> Date: Fri, 09 Apr 2021 16:13:21 +0800 Subject: [PATCH] 代码整理 --- Promise.html | 110 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 82 insertions(+), 28 deletions(-) diff --git a/Promise.html b/Promise.html index 43a81cc..a767f99 100644 --- a/Promise.html +++ b/Promise.html @@ -1,38 +1,92 @@ <html> <head> - <title>Promise</title> + <title>Promise</title> <script type='text/javascript'> - var ok = true; - function successCallBack(){ - console.log("成功"); + //1.链式回调 通过多次调用 then() 可以添加多个回调函数,它们会按照插入顺序进行执行。 + const doSomething = () => new Promise((resolve,reject)=>{setTimeout(() => { + console.log("在setTimeout中做了些事"); + reject(); + }, 10);}); + const successCallBack = () => { + console.log("成功的回调"); }; - function failureCallBack(){ - console.log("失败"); - }; - function successCallBack1(){ - console.log("成功1"); - }; - function failureCallBack1(){ - console.log("失败1"); - }; + const successCallBack1 = () => new Promise((resolve,reject)=>{setTimeout(() => { + console.log("成功的回调1"); + reject(); + }, 10);}); + const failureCallBack = () => { + console.log("失败的回调"); + }; + //返回Promise对象,输出"在setTimeout中做了些事"文本,但是没有执行reject回调。 + const promise = doSomething(); + //执行promise对象的reject回调failureCallBack(),输出“失败的回调”文本,返回promise2对象,由于failureCallBack()方法中没有手动创建Promise所以这里返回的是默认的Promise对象 + const promise2 = promise.then(successCallBack,failureCallBack); + //执行promise2默认回调successCallBack(),返回默认对象promise3 + const promise3 = promise2.then(successCallBack,failureCallBack); + //简写 + doSomething().then(successCallBack,failureCallBack).then(successCallBack,failureCallBack); + //successCallBack1返回用户自己创建的Promise,并且指定了回调函数 + doSomething().then(successCallBack,failureCallBack).then(successCallBack,failureCallBack).then(successCallBack1,failureCallBack).then(successCallBack,failureCallBack); - const wait = ()=> new Promise((resolve,reject)=> { - setTimeout(() => { - console.log('setTimeout1执行完毕'); + //.catch()、finally() + const promise4 = new Promise((resolve,reject)=>{setTimeout(() => { + console.log("promise4:在setTimeout中做了些事"); + console.log("选择路径[A]"); + resolve("路径:A0"); + //reject("路径:A1"); + },10)}) + .then(resolvePara => new Promise((resolve2,reject2) => { + console.log("promise4 then1:成功的回调"); + throw new Error("是错误哦"); + console.log(resolvePara); + console.log("选择路径[B]"); + resolve2(resolvePara + " B0"); + //reject2(resolvePara + " B1"); + }), rejectPara => new Promise((resolve2,reject2) => { + console.log("promise4 then1:失败的回调"); + console.log(rejectPara); + console.log("选择路径[B]"); + resolve2(resolvePara + " B0"); + //reject2(resolvePara + " B1"); + })) + .then(resolvePara => new Promise((resolve3,reject3) => { + console.log("promise4 then1 then2:成功的回调"); + console.log(resolvePara); + console.log("选择路径[C]"); + resolve3(resolvePara + " C0"); + //reject3(resolvePara + " C1"); + }), rejectPara => new Promise((resolve3,reject3) => { + console.log("promise4 then1 then2:失败的回调"); + console.log(rejectPara); + console.log("选择路径[C]"); + resolve3(resolvePara + " C0"); + //reject3(resolvePara + " C1"); + })) + .catch(rejectPara => { + console.log("promise4 catch:异常的回调"); + console.log(rejectPara); + }) + .finally(() => { + console.log("promise4 finally:执行完毕"); + }) + //通常,一遇到异常抛出,浏览器就会顺着 Promise 链寻找下一个 onRejected 失败回调函数或者由 .catch() 指定的回调函数。 + //finally不管成功失败都会执行内部代码,不接受参数。 + + + //2.在本轮 事件循环 运行完成之前,回调函数是不会被调用的。 + console.log("在本轮 事件循环 运行完成之前,回调函数是不会被调用的,你看我是最先执行的"); + //3.即使异步操作已经完成(成功或失败),在这之后通过 then() 添加的回调函数也会被调用。 + const promise5 = new Promise((resolve)=>{ + setTimeout(()=>{ + console.log("promise5 执行的异步操作"); resolve(); - }, 0); - }); - - //调用报错,wait2返回的是setTimeout方法。 - const wait1 = ()=> setTimeout(() => { - console.log('setTimeout2执行完毕'); - return new Promise((resolve,reject)=> { - resolve(); + },10); + }).then(()=>{console.log("promise5 默认回调")}); + setTimeout(()=>{ + promise5.then(() => { + console.log("promise5 即使异步操作已经完成(成功或失败),在这之后通过 then() 添加的回调函数也会被调用"); }); - }, 0); - - - var use = wait().then(successCallBack,failureCallBack).then(successCallBack1,failureCallBack1); + },1000); </script> </head> <body> -- Gitblit v1.9.3