await/async的用法

//==回调地狱的解决方法 , 实际的业务问题:咱们须要按顺序获取:产品数据=>用户数据=>评论数据

//1.传统的写法:

    // 获取产品数据
    ajax('products.json', (products) => {
        console.log('AJAX/products >>>', JSON.parse(products));

        // 获取用户数据
        ajax('users.json', (users) => {
            console.log('AJAX/users >>>', JSON.parse(users));

            // 获取评论数据
            ajax('products.json', (comments) => {
                console.log('AJAX/comments >>>', JSON.parse(comments));
            });
        });
    });

//2.用promise(ES6)封装ajax:

    //封装 Ajax,返回一个 Promise
    function requestP(url) {
        return new Promise(function(resolve, reject) {
            ajax(url, (response) => {
                resolve(JSON.parse(response));
            });
        });
    }

    // 获取产品数据
    requestP('products.json').then((products) => {
        console.log('Promises/products >>>', products);
        // 获取用户数据
        return requestP('users.json');
    }).then((users) => {
        console.log('Promises/users >>>', users);
        // 获取评论数据
        return requestP('comments.json');
    }).then((comments) => {
        console.log('Promises/comments >>>', comments);
    });

//3. await/async
    //async用来表示函数是异步的,定义的函数会返回一个promise对象,能够使用then方法添加回调函数。
    //await 后面能够跟任何的JS 表达式,若是await的是 promise对象会形成异步函数中止执行而且等待 promise 的解决,若是等的是正常的表达式则当即执行。
    // 封装 Ajax,返回一个 Promise
    function requestP(url) {
        return new Promise(function(resolve, reject) {
            ajax(url, (response) => {
                resolve(JSON.parse(response));
            });
        });
    }

    (async () => {
        // 获取产品数据
        let data = await requestP('products.json');

         // 获取用户数据
        let users = await requestP('users.json');

         // 获取评论数据
        let products = await requestP('comments.json');

        console.log('ES7 Async/products >>>', products);
        console.log('ES7 Async/users >>>', users);
        console.log('ES7 Async/comments >>>', comments);
    }());
相关文章
相关标签/搜索