Vue Promise基础用方法

异步传输:定时任务,ajax,事件任务
多次异步传输的顺序无法确定,不能依赖
必须依赖的话就需要嵌套关系(回调地狱,代码可读性低,故需要Promise!)
        <script>
             console.log(typeof Promise)
             console.dir(Promise)

             var vm =  new Promise(function(receive,reject){
                setTimeout(function(){
                flag = false
                if(flag){
                    receive('成功');
                }else{
                    reject('出错了');
                }
                },100)
             })

             vm.then(function(data){
                console.log(data)
             },function(info){
                console.log(info)
             })
        </script>
    </body>

Promise基本用法,即用then来代替回调函数,实现异步事件的顺序输出

        <script>
            function queryData(){
            var p = new Promise(function(resolve,reject){
            var xhr = new XMLHttpRequest()
            xhr.onreadystatechange = function(){
                if(xhr.readyState != 4) return
                if(xhr.readyState == 4 && xhr.status == 200){
                    resolve(xhr.readyState)
                }
                else{
                    reject('发生错误')
                }
            }
            xhr.open('get',url)
            xhr.send(null)
            })
            return p
            }

            //queryData('http://xxxxx').then(function(data){
            //console.log(data)
            //},function(info){
            // console.log(info)
            //})
            //===============================

            queryData('http://xxxxx')
            .then(function(data){
            console.log(data)
            return queryData('http://yyyy')
            }).then(function(data){
            console.log(data)
            return queryData('http://yyyy') 
            }).then(function(data){
            console.log(data)
            return queryData('http://zzz') 
            })
        </script>
    </body>
then()函数参数中的返回值:
1 返回Promise实例对象
2 返回普通值进行接收

Promise常用API:
.then()
.catch()
.finally()
Promise.all() 并发处理多哥异步任务,全部执行完后获得结果
Promise.race() ~ 返回最快处理完的结果

        <script>
            function queryData(){
            var p = new Promise(function(resolve,reject){
            var xhr = new XMLHttpRequest()
            xhr.onreadystatechange = function(){
                if(xhr.readyState != 4) return
                if(xhr.readyState == 4 && xhr.status == 200){
                    resolve(xhr.readyState)
                }
                else{
                    reject('发生错误')
                }
            }
            xhr.open('get',url)
            xhr.send(null)
            })
            return p
        }

            var p = new Promise('http://xxxxx')
            var p2 = new Promise('http://xxxxx')
            var p3= new Promise('http://xxxxx')

            Promise.all([p,p2,p3])
            .then(function(data){
            console.log(data)
            }).catch(function(data){
            console.log(data)
            }).finally(function(data){
            console.log('finally')
            })
        </script>
    </body>
fetch是ajax的升级版,基于Pormise
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值