ES6 - Promise和Ajax (精华)

2 篇文章 0 订阅

 

导读:

  • Promise实际是充当ajax获取后台数据后执行回调的异步执行顺序的一个媒介,客观来说就是避免ajax回调地狱(反复嵌套回调),不然代码不够直观。

例子:

  • 模拟Ajax和Promise的结合使用(Promise主要用于异步执行顺序) :

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="../jquery-3.3.1.min.js"></script>
</head>
<body>
    <script type="text/javascript">
    /*
        定义一个使用promise的ajax请求,模拟用户登录场景
    */
    const ajaxPromise = obj => {
        return new Promise((resolve, reject) => {
            $.ajax({
                type: obj.type,
                url: obj.url,
                data: obj.data,
                success: res => {
                    resolve(res);      // 请求成功则转成Promise对象并判断为resolve状态
                },
                error: err => {
                    reject(err.status);      // 请求失败则转成Promise对象并判断为reject状态
                }
            })
        })
    } 

    /*
        函数1:判断用户登陆成功
     */
    let userLogin = () => {
        // 第一次执行ajaxPromise
        ajaxPromise({
            type: 'get',
            url: 'test.php',
            data: { userName: 'Verin', userPwd: '123456'}
        }).then(res => {
            console.log('后台校验提交的数据并返回成功信息');        // 成功则二次ajax请求,取用户信息
            getUserInfo(res);
        }).catch(err => {
            console.log('用户校验提交的数据失败,无法登陆');
        })
    }

    /*
        函数2:取出对应登录用户的信息
     */
    let getUserInfo = res => {
        ajaxPromise({
            type: 'get',
            url: 'test2.php',
            data: { status: 'success to finish getUserInfo!'}
        }).then(res => {
            console.log('获取用户信息:');
            console.log(res);
        }).catch(err => {
            console.log('获取用户信息失败' + err);
        })
    }

    userLogin();
    </script>
</body>
</html>

 

总结:

  • 刚开始接触 Promise 的伙伴可能有点晕头,书主也琢磨了好一会才想明白,故写此简书一篇,来个 Promise 流程总结:
    1 .把 ajax 返回成功 / 失败的回调封装成一个 Promise 对象(同时判断 resolve / reject 状态)
    2 .其对象根据传来的状态 resolve 则执行.then( res => {} // 实际在Promise.prototype上 )来执行ajax一层返回成功后的二层 ajax 请求,状态为 reject 的则执行对象的.catch( err => {} // 实际在Promise.prototype上 ),以此类推,实现异步请求的顺序执行

 

   source

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值