ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

promise快速掌握与全局错误捕获

2022-05-22 02:00:56  阅读:147  来源: 互联网

标签:resolve console log 捕获 Promise result error promise 全局


promise作为JavaScript中处理异步任务的api,真的非常好用,这里简单分享下个人学习的一些demo,以便快速理解。

promise具体概念就不多说了,可参考MDN文档

demo:

          // 当写了then 没写catch 则会捕获,then 也不写,则不会捕获,写了catch也不会捕获
            window.addEventListener("unhandledrejection", (event) => {
                console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
                event.preventDefault(); // 增加阻止默认事件,阻止页面报错
                // 通过addEventListener绑定的事件,不能通过return false来阻止默认行为
            });

         
            let p0 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve("p0 success");
                }, 1000);
            });
            let p1 = new Promise((resolve, reject) => {
                resolve("p1 success");
            });

            let p2 = new Promise((resolve, reject) => {
                resolve("p2 success");
            });

            let p3 = Promise.reject("失败");
     // promise.all  全部成功  settimeout
            Promise.all([p0, p1])
                .then((result) => {
                    console.log(result); // ['p0 success', 'p1 success']
                })
                .catch((error) => {
                    console.log(error);
                });

             // promise.all  全部成功
            Promise.all([p1, p2])
                .then((result) => {
                    console.log(result); // ['p1 success', 'p2 success']
                })
                .catch((error) => {
                    console.log(error);
                });
            // promise.all  有一个失败
            Promise.all([p1, p3, p2])
                .then((result) => {
                    console.log(result); // 不会走到这里
                })
                // catch是用来捕获promise错误
                .catch((error) => {
                    console.log(error); // 仅 打印 '失败'
                });
              // promise.all  有一个失败,错误捕获写在 then第二个参数里
            Promise.all([p1, p3, p2]).then(
                (result) => {
                    console.log(result); // 不会走到这里
                },
                (error) => {
                    console.log(error); // 仅 打印 '失败'
                }
            );
            // promise.allSettled
            Promise.allSettled([p0, p1])
                .then((result) => {
                    console.dir(result); // [{status: 'fulfilled', value: 'p0 success'},{status: 'fulfilled', value: 'p1 success'}]
                })
                .catch((error) => {
                    console.log(error);
                });


            let p5 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve("p5 success");
                }, 1000);
            });

            let p6 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject("p6 failed");
                }, 1500);
            });
            //  Promise.race
            Promise.race([p5, p6])
                .then((result) => {
                    console.log(result); // 仅打印p5 success
                })
                .catch((error) => {
                    console.log(error);
                });

            let p7 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve("p7 success");
                }, 1500);
            });

            let p8 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject("p8 failed");
                }, 1000);
            });

            Promise.race([p7, p8])
                .then((result) => {
                    console.log(result);
                })
                .catch((error) => {
                    console.log(error); // 仅打印 p8 failed
                });

 

参考文档:

https://www.jianshu.com/p/7e60fc1be1b2

https://blog.csdn.net/tl18382950497/article/details/114946606

标签:resolve,console,log,捕获,Promise,result,error,promise,全局
来源: https://www.cnblogs.com/beileixinqing/p/16296787.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有