• ES6中对Promise解析


    在JavaScript中,所有代码都是单线程执行的。

    1.测试浏览器是否支持Promise

            'use strict';
            new Promise(function(){});
            console.log('支持Promise!');
    2.
        <!-- Axios是一个基于promise的HTTP库,可以用在浏览器
        和node.js中 -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js">
        </script>
        <script>
            let username;
            const usersPromise=axios.get('https://api.github.com/users')
            // 监听事件
            usersPromise.then(reponse=>{
                // console.log(reponse);
                username=reponse.data[0].login;
                // 返回promise
                return axios.get(`https://api.github.com/users/${username}/repos`);
            }).then(reponse=>{
                console.log(reponse.data);
            })
            // 监听错误的发生catch
            .catch(err=>{
                console.error(err)
            })
        </script>

    reponse里面的数据

    3.练习代码

    (1)promise成功案例reslove(可更改参数名)

            // reslove 传入成功的数据
            // 如果失败就返回reject信息
            const p=new Promise((reslove,reject)=>{
                setTimeout(()=>{
                    reslove('This is successful')
                },2000);
            })
            p.then(data=>{
                // 成功的信息
                console.log(data);
            })

     (2)promise失败案例reject(可更改参数名)

            // reslove 传入成功的数据
            // 如果失败就返回reject信息
            const p=new Promise((reslove,reject)=>{
                setTimeout(()=>{
                    reject('This is successful')
                },2000);
            })
            p.then(data=>{
                console.log(data);
            }).catch(err=>{
               //失败的信息
                console.error(err);
            })

     4.多个promise的使用

      Promise.all(iterable) 方法返回一个Promise实例

       iterable参数内promise所有都成功回调完成,如果参数中promise有一个失败那么实例回调失败。失败就找catch里面的代码     

    Promise.race(iterable)方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。tip:注意定时器的时间。

     
            const usersPromise=new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve(['mojombo','vanpelt','wycats']);
                },2000);
            });
            const moviePromise=new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    // resolve({name:'摔跤吧!爸爸',rating:9.2,year:2019});
                    reject(Error('No moviePromise'))
                },500);
            });

            // Promise.all([usersPromise,moviePromise])
            Promise.race([usersPromise,moviePromise])
            .then(responses=>{
                //解构赋值
                const [users,movie]=responses;
                console.log(users);
                console.log(movie);
            })
            .catch(err=>{
                console.error(err);
            })

     

     

  • 相关阅读:
    统计脚本代码行数
    expr算术运算
    lsof命令
    测试当前机器可以创建多少线程
    守护进程写日志
    文件描述符fd,struct files_struct
    linux查看反汇编
    信号补充
    Windows10获取VS管理员权限总是很烦人
    asp.net中的Filter类型其实是被当作单例的
  • 原文地址:https://www.cnblogs.com/linxim/p/11769752.html
Copyright © 2020-2023  润新知