我在base.js写好了公共类,然后在index.js引用,问题在获取图片ajax这个方法最后return为undefined
以下是base.js的代码
import { Config } from './config.js';
import {mockData} from './mockData.js';
class Base {
constructor() {
this.API_HOST = Config.API_HOST;
this.DEBUG = Config.DEBUG;
}
//http请求类
ajax (params, callback) {
var url = 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
let loginFlag = 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;
var imgUrl;
var params = {
'url': 'file/fileController/download?id=' + id,
'type': 'GET',
'responseType': 'arraybuffer'
}
// return params
this.ajax(params, function (res) {
// console.log(res, '图片在这');
let base64 = wx.arrayBufferToBase64(res.data);
imgUrl = 'data:image/jpg;base64,' + base64;
console.log(imgUrl, "imgUrl")
return imgUrl //问题在这里return为什么是undefined
})
}
}
export {Base}
下面是index.js 的代码
ceshi: function () {
console.log(base.imgAjax('2c91808b6d667186016d6672d9ff0007'), "ceshi")
}
异步、同步、回调;傻傻分不清。
imgAjax
是个同步函数,没有任何返回值,当然是undefined
;而你认为的返回,是在 回调函数里面返回的, 而这个回调函数 又是在另外一个回调中被触发的。
return imgUrl //问题在这里return为什么是undefined
这行代码,没有任何问题; 是你的console.log 执行的时候, 这段代码还没执行。
举个很简单的异步的例子