陈广安个人网站
会写代码的咸鱼
陈广安个人网站阿里云盘资源
陈广安个人网站网盘资源搜索
“ 梦想还是要有的,万一实现了呢!”
— 马云

promise 配合async/await 将异步改为同步


第一步:定义js文件,用promise 封装请求

function getBaseUrl() {
    return new Promise((resolve,reject) => {
        uni.request({
            url:'http://www.baidu.com',
            success: (res) => {
                resolve(res.data)
            }
        })
    })
}
export {
    getBaseUrl
}
        

第二步:async/await 将异步改为同步

//引入封装好的js
import {getBaseUrl} from "@/common/config.js" 
onLaunch: async function() {
    let url = await getBaseUrl();	
    console.log(url);
}
        

promise 解决回调地狱


第一步:调用微信授权,获取 code
第二步:将 code 发送到后台换取 openide
第三步:将 openid 发送到后台获取用户信息
第四步:获取到最终结果


1、拆分写法

//调用微信授权,获取 code
let autoLogin = new Promise((resolve,reject)=>{
    uni.login({
        provider:'weixin',
        success: r => {
            let code = r.code;
            resolve({service:'User.Jscode2session',code})
        },fail(e){
            reject(e+'授权失败1')
        }
    });
})

//将 code 发送到后台换取 openid
let loginCode = autoLogin.then((res)=>{
    return new Promise((resolve,reject)=>{
        _this.$u.get('', res).then(data => {
            resolve(data)
        });
    })
})

//将 openid 发送到后台获取用户信息
let userData = loginCode.then((res)=>{
    return new Promise((resolve,reject)=>{
        let loginRequery = {
            service:'User.Login',
            type:'weixinxcx',
            openid:res.info.openid,
            online:1,
            }
        _this.$u.post('',loginRequery).then(data => {
            resolve(data)
        })
    });
})

//获取到最终结果
userData.then((res)=>{
    console.log(res);
})
        

2、简化写法

new Promise((resolve,reject)=>{
    
    //调用微信授权,获取 code
    uni.login({
        provider:'weixin',
        success: r => {
            let code = r.code;
            resolve({service:'User.Jscode2session',code})
        },fail(e){
            reject(e+'授权失败1')
        }
    });
    
    //将 code 发送到后台换取 openid
}).then((res)=>{
    return new Promise((resolve,reject)=>{
        _this.$u.get('', res).then(data => {
            resolve(data)
        });
    })
    
    //将 openid 发送到后台获取用户信息
}).then((res)=>{
    return new Promise((resolve,reject)=>{
        let loginRequery = {
            service:'User.Login',
            type:'weixinxcx',
            openid:res.info.openid,
            online:1,
            }
        _this.$u.post('',loginRequery).then(data => {
            resolve(data)
        })
    });
    
    //获取到最终结果
}).then((res)=>{
    console.log(res);
})
        

3、catch 加上异常捕捉写法,如:打印未定义变量a,会进入catch

new Promise((resolve,reject)=>{
    
    console.log(a)
    
    //调用微信授权,获取 code
    uni.login({
        provider:'weixin',
        success: r => {
            let code = r.code;
            resolve({service:'User.Jscode2session',code})
        },fail(e){
            reject(e+'授权失败1')
        }
    });
    
    //将 code 发送到后台换取 openid
}).then((res)=>{
    return new Promise((resolve,reject)=>{
        _this.$u.get('', res).then(data => {
            resolve(data)
        });
    })
    
    //将 openid 发送到后台获取用户信息
}).then((res)=>{
    return new Promise((resolve,reject)=>{
        let loginRequery = {
            service:'User.Login',
            type:'weixinxcx',
            openid:res.info.openid,
            online:1,
            }
        _this.$u.post('',loginRequery).then(data => {
            resolve(data)
        })
    });
    
    //获取到最终结果
}).then((res)=>{
    console.log(res);
}).catch(e=>{
    console.log(e);
})