• 解决小程序api无法返回promise对象


    0.直接使用传统的回调函数来调用后端api接口

    
    
      // 通过回调函数,来使用接口数据
    userAuthorized_back(){
        wx.getSetting({
            success: data => {
                if(data.authSetting['scope.address.userInfo']){
                    wx.getUserInfo({
                        success: data => {
                            this.setData({
                                authorized: true,
                                userInfo: data.userInfo
                            })
                        }
                    })
                }
            }
        })
    }

    1.创建promisic函数

    让后端api接口返回promise对象前提是返回的不是promise对象)

    // 可以解决小程序官方api不能返回promise对象的问题,可以成功返回promise对象  
    // func是一个函数
    const promisic = function(func){
        return function(params = {}){
            return new Promise((resolve, reject) => {
                const args = Object.assign(params, {
                    success: (res) => {
                        resolve(res)
                    },  
                    fail: (err) => {
                        reject(err)
                    }
                })
                func(args)
            })
        }
    }

    2.使用promisic函数,通过promise对象

    2.1.将promisic函数导出

    export { promisic }

    2.2.在使用promisic函数的页面中引入

    import { promisic } from "./utils/randomfun"

    2.3.使用引入的promisic函数

    // 通过promise,来使用接口数据
    userAuthorized_promise(){
        promisic(wx.getSetting)()
        .then(data => {
            if(data.authSetting['scope.address.userInfo']){
                return promisic(wx.getUserInfo)()
            }
            return false
        })
        .then(data => {
            if(!data) return
            this.setData({
                authorized: true,
                userInfo: data.userInfo            
            })
        })
    }

    3.通过async...await来调用接口---变相让异步变成同步

    // 通过async和await,来使用接口数据
    async userAuthorized_asyncawait(){
        const data = await promisic(wx.getSetting)()
        if(data.authSetting['scope.address.userInfo']){
            const res = await promisic(wx.getUserInfo)()
            const userInfo = res.userInfo
            this.setData({
                authorized: true,
                userInfo               
            })
        }
    }
  • 相关阅读:
    元宇宙通证
    高性能公链
    区块链不可能三角
    搭建自己的在线API文档系统
    windows 安装python环境
    golang beego项目的正确开启方法
    人生发财靠康波
    蒙代尔不可能三角
    Kubernetes 部署Dashboard UI
    Kubernetes 使用kubeadm创建集群
  • 原文地址:https://www.cnblogs.com/pwindy/p/16373940.html
Copyright © 2020-2023  润新知