promise应用

Promise 是用来管理异步编程的,它本身不是异步的

 

 

多个请求结果合并在一起

一个页面有多个请求,我们需要所有的请求都返回数据后,再一起处理渲染

合并请求结果并处理错误

有时候页面挂掉了,可能因为接口异常导致,或许只是一个无关紧要的接口挂掉了。那么一个接口挂掉了为什么会导致整个页面无数据呢?Promise.all告诉我们,如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),就不再执行then方法回调。不再执行then回调这个是重点!!!如果要避免这情况如果如下处理

我们需要是这种情况:
能否把多个请求合并在一起,哪怕有的请求失败了,也返回数据给我们,即使当中接口返回数据有错误,我们只需要在一个地方处理错误的逻辑即可
//1.获取轮播图数据列表
function getBannerList(){
    return new Promise((resolve,reject)=>{
        setTimeout(function(){
            // resolve('轮播图数据')
            reject('获取轮播图数据失败啦')
        },300)
    })
}

//2.获取店铺列表
function getStoreList(){
   return new Promise((resolve,reject)=>{
        setTimeout(function(){
            resolve('店铺数据')
        },500)
    })
}

//3.获取分类列表
function getCategoryList(){
    return new Promise((resolve,reject)=>{
        setTimeout(function(){
            resolve('分类数据')
        },700)
    })
}

function initLoad(){
    // loading.show()
    Promise.all([
        getBannerList().catch(err=>err),
        getStoreList().catch(err=>err),
        getCategoryList().catch(err=>err)
    ]).then(res=>{
        console.log(res) // ["获取轮播图数据失败啦", "店铺数据", "分类数据"]
        
        if(res[0] == '轮播图数据'){
            //渲染
        }else{
            //获取 轮播图数据 失败的逻辑
        }
        if(res[1] == '店铺数据'){
            //渲染
        }else{
            //获取 店铺列表数据 失败的逻辑
        }
        if(res[2] == '分类数据'){
            //渲染
        }else{
             //获取 分类列表数据 失败的逻辑
        }
        
        // loading.hide()
    })
}

initLoad()

 

验证多个请求结果是否都是满足条件

在一个微信小程序项目中,做一个表单的输入内容安全验证,调用的是云函数写的方法,表单有多7个字段需要验证,

都是调用的一个 内容安全校验接口,全部验证通过则 可以 进行正常的提交

 

 

 

posted @ 2020-04-20 14:03  慕斯undefined  阅读(139)  评论(0编辑  收藏  举报