猿问

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

我在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则重新赋值loginFlag
letloginFlag=res.header.Authorization
if(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的错误函数')
}
})
}
//获取图片ajax
imgAjax(id){
var_this=this;
varimgUrl;
varparams={
'url':'file/fileController/download?id='+id,
'type':'GET',
'responseType':'arraybuffer'
}
//returnparams
this.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")
}
千万里不及你
浏览 1067回答 2
2回答

缥缈止盈

异步、同步、回调;傻傻分不清。imgAjax是个同步函数,没有任何返回值,当然是undefined;而你认为的返回,是在回调函数里面返回的,而这个回调函数又是在另外一个回调中被触发的。returnimgUrl//问题在这里return为什么是undefined这行代码,没有任何问题;是你的console.log执行的时候,这段代码还没执行。举个很简单的异步的例子functiona(){setTimeout(()=>{return'123'},5)}letd=a();console.log(d);//请问这个地方输出的内容是什么?

慕的地8271018

方法一:回调callbackfunctiondemo1(callback){setTimeout(function(){callback('完成01')},2000)}demo1(alert)方法2:asyncawaitPromise;(asyncfunction(){functiondemo2(){returnnewPromise(resolve=>{setTimeout(()=>{resolve('完成02')},200)})}letmsg=awaitdemo2()alert(msg)})();
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答