我在base.js写好了公共类,然后在index.js引用,问题在获取图片ajax这个方法最后return为undefined以下是base.js的代码import{Config}from'./config.js';import{mockData}from'./mockData.js';classBase{constructor(){this.API_HOST=Config.API_HOST;this.DEBUG=Config.DEBUG;}//http请求类ajax(params,callback){varurl=this.API_HOST+params.url;if(params.loginUrl==undefined){params.loginUrl='../../login/login'}if(params.responseType==undefined){params.responseType='text'}wx.request({url:url,data:params.data,method:params.type,responseType:params.responseType,header:{'content-type':'application/x-www-form-urlencoded','Authorization':wx.getStorageSync('loginFlag')},success:function(res){//未登录if(res.data.code==106||res.data.code==107||res.data.code==108){wx.reLaunch({url:params.loginUrl})}//如果Authorization不为undefined则重新赋值loginFlagletloginFlag=res.header.Authorizationif(loginFlag!=undefined||loginFlag!=null){wx.setStorageSync('loginFlag',res.header.Authorization)}//如果callback存在,就执行callback(res)callback&&callback(res)},fail:function(err){//console.log(JSON.stringify(err)+'这里是base的错误函数')}})}//获取图片ajaximgAjax(id){var_this=this;varimgUrl;varparams={'url':'file/fileController/download?id='+id,'type':'GET','responseType':'arraybuffer'}//returnparamsthis.ajax(params,function(res){//console.log(res,'图片在这');letbase64=wx.arrayBufferToBase64(res.data);imgUrl='data:image/jpg;base64,'+base64;console.log(imgUrl,"imgUrl")returnimgUrl//问题在这里return为什么是undefined})}}export{Base}下面是index.js的代码ceshi:function(){console.log(base.imgAjax('2c91808b6d667186016d6672d9ff0007'),"ceshi")}
2 回答
缥缈止盈
TA贡献2041条经验 获得超4个赞
异步、同步、回调;傻傻分不清。imgAjax是个同步函数,没有任何返回值,当然是undefined;而你认为的返回,是在回调函数里面返回的,而这个回调函数又是在另外一个回调中被触发的。returnimgUrl//问题在这里return为什么是undefined这行代码,没有任何问题;是你的console.log执行的时候,这段代码还没执行。举个很简单的异步的例子functiona(){setTimeout(()=>{return'123'},5)}letd=a();console.log(d);//请问这个地方输出的内容是什么?
慕的地8271018
TA贡献1796条经验 获得超4个赞
方法一:回调callbackfunctiondemo1(callback){setTimeout(function(){callback('完成01')},2000)}demo1(alert)方法2:asyncawaitPromise;(asyncfunction(){functiondemo2(){returnnewPromise(resolve=>{setTimeout(()=>{resolve('完成02')},200)})}letmsg=awaitdemo2()alert(msg)})();
添加回答
举报
0/150
提交
取消