为了账号安全,请及时绑定邮箱和手机立即绑定

急求!!!!js回调函数return变量,返回undefined,怎么解决不是返回undefined

急求!!!!js回调函数return变量,返回undefined,怎么解决不是返回undefined

千万里不及你 2019-10-08 09:44:10
我在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);//请问这个地方输出的内容是什么?
                            
查看完整回答
反对 回复 2019-10-08
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

方法一:回调callback
functiondemo1(callback){
setTimeout(function(){
callback('完成01')
},2000)
}
demo1(alert)
方法2:asyncawaitPromise
;(asyncfunction(){
functiondemo2(){
returnnewPromise(resolve=>{
setTimeout(()=>{
resolve('完成02')
},200)
})
}
letmsg=awaitdemo2()
alert(msg)
})();
                            
查看完整回答
反对 回复 2019-10-08
  • 2 回答
  • 0 关注
  • 1066 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信