js之promise——以一种优雅的方式处理异步请求

1. 什么是promise?
在这里插入图片描述
2. 为什么要使用promise?
在这里插入图片描述
3. 基础用法
方式一:

<!DOCTYPE html>
<html>

<head></head>

<body>
    <script>
        new Promise((resolve, reject) => {
            setTimeout(() => {  // 模拟请求
                resolve();     // 请求成功时执行该函数
                reject();       //请求失败时执行该函数
            }, 2000)
        }).then(val => {   // val是请求拿到的数据,then里面是resolve函数要执行的代码
            console.log("处理我们请求1到的data数据...");
            console.log("处理我们请求1到的data数据...");
            console.log("处理我们请求1到的data数据...");
            return new Promise((resolve, reject) => { //异步中还有异步
                setTimeout(() => {
                    resolve();
                    reject();
                }, 2000)
            }).then(val => {
                console.log("处理我们请求2到的data数据...");
                console.log("处理我们请求2到的data数据...");
                console.log("处理我们请求2到的data数据...");
            }).catch(err => {
                console.log("请求2出错的错误信息...")
            })
        }).catch(err => {       // catch中是reject函数要执行的代码
            console.log("请求1出错的错误信息...");
        })
    </script>
</body>

</html>

方式二:
在then中传入两个函数,一个为resolve一个为reject

new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve("data1");
                reject("err1");
            })
        }).then(val => {
            console.log("处理我们请求1到的data数据...");
            console.log("处理我们请求1到的data数据...");
            console.log("处理我们请求1到的data数据...");
            console.log(val)
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve("data2");
                    reject("err2");
                })
            }).then(val => {
                console.log("处理我们请求2到的data数据...");
                console.log("处理我们请求2到的data数据...");
                console.log("处理我们请求2到的data数据...");
                console.log(val);
            }, err => {
                console.log(err);
            })
        }, err => {
            console.log("请求1出错的错误信息...");
            console.log(err);
        })

运行结果:
在这里插入图片描述
3. 链式调用
适用与对请求结果链式处理的情况。
在这里插入图片描述
4. Promise.all
适用场景:
假如有一个场景我们需要多个接口返回的数据才能完成,但是我们并不知道多个请求什么时候能够全部拿到数据。

Promise.all(
            [ // 传入一个可迭代对象
                new Promise((resolve, reject) => {
                    setTimeout(() => {
                        resolve({
                            "kobe": 18
                        });
                        // reject("err1")
                    }, 2000)
                }),

                new Promise((resolve, reject) => {
                    setTimeout(() => {
                        resolve({
                            "villero": 20
                        });
                        // reject("err2")
                    }, 2000)
                })
            ]
        ).then(results => {        // results是一个数组,results[0]就是第一个resolve中传的值
            console.log(results)
        })

在这里插入图片描述
如果看完本文还有不理解的可以听下Bi站视频课程,很详细的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值