美文网首页ES6
ES6 - Promise和Ajax (精华)

ES6 - Promise和Ajax (精华)

作者: 饮杯梦回酒 | 来源:发表于2019-01-10 21:59 被阅读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>
  • 来张效果图 :( 书主自己模拟了后台环境默认都是请求成功的哈 )


    Result

总结:

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

相关文章

  • ES6 - Promise和Ajax (精华)

    导读: Promise实际是充当ajax获取后台数据后执行回调的异步执行顺序的一个媒介,客观来说就是避免ajax回...

  • es6 promise ajax 请求实例运用代码

    出处 2018前端面试总结,看完弄懂,工资少说加3K - 掘金 ---- es6 promise ajax 源码

  • ES6异步:Promise

    #Promise迷你书通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise

  • ajax和promise的例子

    最近在学ES6的语法,复习了下ajax和promise。选取了几个有代表性的例子,反复写了几遍,加深了不少理解。a...

  • ES6异步请求

    Promise //Promise其实就是ajax的一个封装方式,简化ajax复杂度//Promise-all适合...

  • Fetch

    较系统整理了下Fetch和Ajax: Fetch和Ajax的区别: FetchAjaxfetch基于Promise...

  • 满足promise规则的ajax

    规范Ajax promise的使用规则为: 因为.then()和.catch()返回promise对象,所以可以被...

  • AJAX和Promise

    给request设置第四部分,但是在chrome上看不到,因为当method为get时, chrome 不让设置...

  • 手写ajax

    基于promise的ajax

  • ES6--Promise

    学过ES6的同学大概都知道Promise,可想而知Promise在ES6中很重要。 Promise对象代表了未来将...

网友评论

    本文标题:ES6 - Promise和Ajax (精华)

    本文链接:https://www.haomeiwen.com/subject/fejzrqtx.html