微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Promise笔记

1. 什么情况下会使用Promise?

  • 有异步操作时

2. 基本使用

  • 套路

        new Promise(((resolve, reject) => {
            // ajax网格请求,响应数据data
            // 如果成功, 调用resolve方法
            resolve(data)
            // 如果失败, 调用reject方法
            // reject(err)
        })).then((data)=>{  // data就跑到这里来了
            // 对data进行业务处理.
        }).catch((err)=>{
            // 处理错误信息  
        })
    
  • 示例

        new Promise(((resolve, reject) => {
            // 使用setTimeout模拟网络请求,返回一个'hello vue js'
            setTimeout(()=>{
                resolve('hello vue js')
            },1000)
        })).then((data)=>{
            console.log(data);
        })
    

3. 链式调用

  • 原始版

     // 第一次网络请求,返回aaa, 拼接111后,交给第二步处理, 第2步拿到结果后拼上222 ,   然后....
        new Promise(((resolve, reject) => {
            setTimeout(() => {
                resolve('aaa');
            }, 1000)
        })).then(data => {
            // 处理10行代码
            console.log('第1步处理的10行代码');
            return new Promise((resolve) => {
                resolve(data + ' 111');
            })
        }).then(data => {
            console.log('第2步处理的10行代码');
            return new Promise((resolve) => {
                resolve(data + ' 222');
            })
        }).then(data => {
            console.log('第3步处理的10行代码');
            console.log(data);
        })
    
    
  • 精简版

     new Promise(((resolve, reject) => {
            setTimeout(() => {
                resolve('aaa');
            }, 1000)
        })).then(data => {
            // 处理10行代码
            console.log('第1步处理的10行代码');
            return Promise.resolve(data + ' 111')
            // return Promise.reject(data + ' 111')  // 处理错误
        }).then(data => {
            console.log('第2步处理的10行代码');
            return Promise.resolve(data + ' 222')
        }).then(data => {
            console.log('第3步处理的10行代码');
            console.log(data);
        })
    
  • 最简版

        new Promise(((resolve, reject) => {
            setTimeout(() => {
                resolve('aaa');
            }, 1000)
        })).then(data => {
            // 处理10行代码
            console.log('第1步处理的10行代码');
            // return data + ' 111'
            throw 'error message' // 处理异常
        }).then(data => {
            console.log('第2步处理的10行代码');
            return data + ' 222'
        }).then(data => {
            console.log('第3步处理的10行代码');
            console.log(data);
        }).catch(err => {
            console.log(err);
        })
    

4. Promise All方法的使用

  Promise.all([
        new Promise(((resolve, reject1) => {
            setTimeout(() => {   // 网络请求1 
                resolve('aaa')
            }, 1000)
        })),

        new Promise(((resolve, reject1) => {
            setTimeout(() => {   //网络请求2
                resolve('bbb')
            }, 2000)
        }))
    ]).then(results => {
        console.log(results);  // ["aaa", "bbb"]
    });

只有等网络请求1,网络请求2都返回结果之后,then方法才会执行,而且其参数是个数组, 数组中的元素就是两次网络请求的返回值.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐