亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

急求!?。?!js回調函數return變量,返回undefined,怎么解決不是返回undefined

急求?。。。s回調函數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 關注
  • 1091 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號