Promise

举报
dragon-w 发表于 2024/07/12 09:04:30 2024/07/12
【摘要】 ​ Promise.All()    Promise.all()关注多个Promise对象的状态变化,传入多个Promise实例,包装成一个新的Promise实例返回。 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="I...

 Promise.All()    

Promise.all()关注多个Promise对象的状态变化,传入多个Promise实例,包装成一个新的Promise实例返回。 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //---------//
        //基本用法
        const delay=ms=>{
            return new Promise(resolve=>{
                setTimeout(resolve,ms);
            });
        }

        const p1=delay(1000).then(()=>{
            console.log("p1完成了");
            return 'p1';
        })

        const p2=delay(2000).then(()=>{
             console.log("p2完成了");
            // return p2;
           return  Promise.reject("失败了");
        })


        const p = Promise.all([p1,p2]);
        p.then(data=>{
            console.log("都成功了");
        },err=>{
            console.log("部分失败了");
        })
        
    </script>
</body>
</html>

Promise.race()的状态取决于第一个完成的Promise对象,如果第一个成功了,那最终就是成功的,如果第一个失败了,那最终就是失败的。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //Promise.all()关注多个Promise对象的状态变化
        //传入多个Promise实例,包装成一个新的Promise实例返回
        //---------//
        //基本用法
        const delay=ms=>{
            return new Promise(resolve=>{
                setTimeout(resolve,ms);
            });
        }

        const p1=delay(1000).then(()=>{
            console.log("p1完成了");
            return 'p1';
        })

        const p2=delay(2000).then(()=>{
             console.log("p2完成了");
            // return p2;
           return  Promise.reject("失败了");
        })


        const p = Promise.race([p1,p2]);
        p.then(data=>{
            console.log("都成功了");
        },err=>{
            console.log("部分失败了");
        })
        
    </script>
</body>
</html>

Promise.allSettled:没有必要管第二个参数,永远都是成功的,只是忠实记录下各个promise的状态。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //Promise.all()关注多个Promise对象的状态变化
        //传入多个Promise实例,包装成一个新的Promise实例返回
        //---------//
        //基本用法
        const delay=ms=>{
            return new Promise(resolve=>{
                setTimeout(resolve,ms);
            });
        }

        const p1=delay(1000).then(()=>{
            console.log("p1完成了");
            return 'p1';
        })

        const p2=delay(2000).then(()=>{
             console.log("p2完成了");
            // return p2;
           return  Promise.reject("失败了");
        })


        const p = Promise.allSettled([p1,p2]);
        p.then(data=>{
            console.log("都成功了");
        },err=>{
            console.log("部分失败了");
        })
        
    </script>
</body>
</html>

使用Promise需要注意的事项:

1.调用了resolve或者reject后,后面不推荐在编写别的代码,虽然写了也是会执行的。推荐在调用resolve或reject后,加上return,不在执行他后面的代码。

2.参数如果不是Promise对象,会将不是Promise对象的转换为Promise对象

编辑

3.Promise.all()的错误处理

编辑

 也可以不单独处理,在Promise.all里统一的处理

编辑



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。