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个字段需要验证,
都是调用的一个 内容安全校验接口,全部验证通过则 可以 进行正常的提交