【原创】Promise异步编程
2022/8/12 1:27:58
本文主要是介绍【原创】Promise异步编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
show me the code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | function getPromise(cbk){ return (new Promise(cbk)); } getPromise(function (res,rej) { res("suc1") //只会执行一个,并把参数传递到catch或者then rej("err1") }).catch(function(err){ console.log(err,1) }).then(function (res) { console.log(res,2) getPromise(function(res,rej){ /*res((new Promise(function(res,rej){ //return "suc2"; res("suc2") })))*/ //res() 不能传递Promise对象 //res("suc2") rej((new Promise(function(res,rej){ rej("err2") //then不会执行 }))) //不能在res()之后执行 }).catch(function (err) { console.log(err,3) err.catch(function(err){ console.log(err,3.2) }).then(function(res){ console.log(res,3.3) }) }).then(function (res) { console.log(res,4.1) }) return "succ2-1" }).then(function(res){ console.log(res,5) return getPromise(function(res,rej){ rej("err3") res("suc3") }) .catch(function (err) { console.log(err,6) return "err3-1" }) .then(function (res) { console.log(res,7) return res }) }).catch(function(err){ console.log(err,8) }).then(function(res){ console.log(res,9) return getPromise(function(res,rej){ rej("err4") res("suc4") }) }).catch(function(err){ console.log(err,10) return "from catch" }).then(function(res){ console.log(res,11) //会报错 /*res.catch(function(err){ console.log(res,10) }).then(function(res){ console.log(res,11) })*/ getPromise(function(res,rej){ //return "end" //会退出 //rej("err5") rej((new Promise(function(res,rej){ res("suc5-1") //then不会执行 }))) res("suc6") return "end2" //返回值无用 }).catch(function(err){ console.log(err,12.1) err.catch(function(err){ console.log(err,12.2) }).then(function(res){ console.log(res,12.3) }) return "suc6 from catch" }).then(function(res){ //res()和rej()有一个执行都会走then() console.log(res,13) //return "suc7" return (new Promise(function(res,rej){ //res("suc7-1") //then不会执行 })) }).then(function(resp){ console.log(resp,14) }) }); 结果 suc1 2 Promise { < rejected > 'err2' } 3 succ2-1 5 err2 3.2 undefined 4.1 err3 6 undefined 3.3 err3-1 7 err3-1 9 err4 10 from catch 11 Promise { 'suc5-1' } 12.1 suc6 from catch 13 suc5-1 12.3 |
结论:
1,resolve()和reject()有一个执行都会走 then();
2,Promise的cbk()内部 return 返回值,只会退出但返回值没有用;
3,then()和catch()方法只会接收resolve()和reject()的传递过来的值;
4,then()方法若有返回值,会传给下一个then()方法的参数,即最简单的链式调用;
5,resolve()和reject()顺序:reject()先执行时,catch()和then()都会触发,但是then()接收的参数为null,此时如果在catch()方法中有return 返回值,则可以被then()接收到;resolve()先执行时,只会触发then(),参数传递有效;
6,reject()可以传递Promise对象但不能在resolve()之后执行会报错,resolve()不可以传递Promise对象会报错;
7,then()和catch()返回不了Promise对象;catch()可以接收Promise对象;
一定要加上异步任务,否则没有啥意义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | function getPromise(cbk){ return (new Promise(cbk)); } getPromise(function (res,rej) { setTimeout(function () { console.log("time1") res("suc1") //只会执行一个,并把参数传递到catch或者then rej("err1") },500) }).catch(function(err){ console.log(err,1) }).then(function (res) { console.log(res,2) getPromise(function(res,rej){ /*res((new Promise(function(res,rej){ //return "suc2"; res("suc2") })))*/ //res() 不能传递Promise对象 //res("suc2") setTimeout(function () { rej((new Promise(function(res,rej){ rej("err2") //then不会执行 }))) //不能在res()之后执行 },500) }).catch(function (err) { console.log(err,3) err.catch(function(err){ console.log(err,3.2) }).then(function(res){ console.log(res,3.3) }) }).then(function (res) { console.log(res,4.1) }) return "succ2-1" }).then(function(res){ console.log(res,5) return getPromise(function(res,rej){ setTimeout(function () { rej("err3") res("suc3") },500) }) .catch(function (err) { console.log(err,6) return "err3-1" }) .then(function (res) { console.log(res,7) return res }) }).catch(function(err){ console.log(err,8) }).then(function(res){ console.log(res,9) return getPromise(function(res,rej){ setTimeout(function () { rej("err4") res("suc4") },500) }) }).catch(function(err){ console.log(err,10) return "from catch" }).then(function(res){ console.log(res,11) //会报错 /*res.catch(function(err){ console.log(res,10) }).then(function(res){ console.log(res,11) })*/ getPromise(function(res,rej){ setTimeout(function () { rej((new Promise(function(res,rej){ res("suc5-1") //then不会执行 }))) res("suc6") },500) return "end2" //返回值无用 }).catch(function(err){ console.log(err,12.1) err.catch(function(err){ console.log(err,12.2) }).then(function(res){ console.log(res,12.3) }) return "suc6 from catch" }).then(function(res){ //res()和rej()有一个执行都会走then() console.log(res,13) //return "suc7" return (new Promise(function(res,rej){ //res("suc7-1") //then不会执行 })) }).then(function(resp){ console.log(resp,14) }) }); |
这篇关于【原创】Promise异步编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?