h***@163.com
h***@163.com
  • 发布:2019-02-16 00:45
  • 更新:2023-03-16 21:58
  • 阅读:10849

uni.request 如何把得到的data做为函数的返回值

分类:uni-app

在public.js中定义了一个方法,想返回res.data

wxCode2Session = function(JSCODE)  
{     
    return uni.request({  
        url: 'https://api.weixin.qq.com/sns/jscode2session?appid=xxxx&secret=xxxx&js_code='+JSCODE+'&grant_type=authorization_code',  
        method: 'GET',  
        networkTimeout:6000,  
        data: {},  
        success: (res) => {           
            return res.data;},  
        fail: (err) => {  
            return null;},  
        complete: () => {}  
    });  
}

在主程序中先引用,然后写个方法wxLogin

import publicJs from '../../common/public.js';   
......  
wxLogin(e){  
                this.sysInfo();  
                uni.login({  
                  provider: 'weixin',  
                  success: function (loginRes) {  
                    console.log(loginRes.authResult);  
                    // 获取用户信息  
                    uni.getUserInfo({  
                      provider: 'weixin',  
                      success: function (infoRes) {  
                        console.log('用户昵称为:' + infoRes.userInfo.nickName);  
                        userInfo = publicJs.wxCode2Session(loginRes.code);  

                      }  
                    });  
                  }  
                });               

            },

会出现错误提示userInfo is not defined;at api operateWXData success callback function

2019-02-16 00:45 负责人:无 分享
已邀请:
newgudi

newgudi

我也是被这个问题困扰了好久,仔细查阅了官方文档,可以这样解决:
在项目根目录的api目录中,新建一个user.js文件,用来专门处理与用户相关的接口请求。比如现在我要检查用户登录情况:

export const checkLogin = (uid)=>{  
  let resData = uni.request({  
      url:URL   "/Admin.User/checkLogin",    
      {uid:uid}  
  })  
}

注意这里就传url和要传给后台的data就好了,不要传seccuss等等那些回调函数,因为只有这样,uni.request才会给你返回Promise对象。
然后在me.vue中这样处理:

import {checkLogin} from "@/api/user.js"  //引入接口中的方法  
。。。。。  
// 在onLoad中处理:  
let loginSate= checkLogin()   
loginSate.then(data=>{  
    var [err, res]  = data;  //data是一个数组,包含请求的返回数据res,和错误处理err                    
})  
8***@qq.com

8***@qq.com - 湖北技升

用回调,return肯定不行的,这个是异步传输

  • 1***@qq.com

    那如何解决呢 我在回调里面调方法就提示这个

    2019-04-29 17:05

  • jtshushu

    回复 1***@qq.com: 你好怎么解决呢 我也遇到这个问题了

    2019-11-04 15:59

l***@163.com

l***@163.com - 世界这么大,老衲还年轻

如果有人遇到这个问题,解决办法是把

userInfo = publicJs.wxCode2Session(loginRes.code);  

改为

let userInfo = publicJs.wxCode2Session(loginRes.code);  

或者

var userInfo = publicJs.wxCode2Session(loginRes.code);  

错误原因是变量userInfo未定义

8***@qq.com

8***@qq.com

参考
https://blog.csdn.net/qq_56699365/article/details/129600945

要回复问题请先登录注册