js如何在当前函数中执行另一个函数,并等待另一个函数执行结束
var baseURL = require('./api.js');
var sm2 = require('./sm2.js');
var appJs;
// 展示进度条的网络请求
// url:网络请求的url
// params:请求参数
// message:进度条的提示信息
// methods:请求方式
// hideLoad:隐藏wx.showLoading
// hideToast:隐藏wx.showToast
//用于生成uuid
function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
function guid() {
return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}
function objKeySort(obj) { //排序的函数
var newkey = Object.keys(obj).sort();
//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
var newObj = {}; //创建一个新的对象,用于存放排好序的键值对
for (var i = 0; i < newkey.length; i++) { //遍历newkey数组
newObj[newkey[i]] = obj[newkey[i]]; //向新创建的对象中按照排好的顺序依次增加键值对
}
return newObj; //返回排好序的新对象
}
function timest() {
var tmp = Date.parse(new Date()).toString();
tmp = tmp.substr(0, 10);
return tmp;
}
var uuid;
var token = "";
var _token_ = "";
let superPrivateKey = sm2.superPrivateKey;
let privateKey = "";
const rsa = require('../utils/cryptojs-master/cryptojs.js');
const Encrypt = require('../utils/jsencrypt.min.js');
let encryptor = new Encrypt.JSEncrypt();
encryptor.setPrivateKey(superPrivateKey); // 设置私钥
// function getResult(callback, callback1) {
// if (!privateKey) {
// callback()
// debugger
// } else {
// callback1()
// }
// }
// getResult(getA, requestLoading);
function getA() {
wx.request({
url: baseURL.baseURL + 'api/services/app/Setting/GetCerPriKeyAsync',
data: '',
header: {},
method: 'Get',
success: function(res) {
console.log(res)
let array = res.data.Result.Data;
let sourcePrivate = '';
for (let a = 0; a < array.length; a++) {
sourcePrivate += encryptor.decrypt(array[a]);
}
console.log("原始私钥" + sourcePrivate);
encryptor.setPrivateKey(sourcePrivate);
privateKey = sourcePrivate;
debugger
// requestLoading()
// getHomeSetting()
},
fail: function(res) {
console.log(res)
},
complete: function(res) {},
})
}
function requestLoading(url, params, message, methods, hideLoad, hideToast) {
if (!appJs) {
appJs = getApp();
}
return new Promise(function(resolve, reject) {
if (!privateKey) {
getA()
debugger
reject()
}
var method = methods || "GET";
params = params || {};
params.MpContentType = 1;
if (!hideLoad) {
if (method == "POST") {
if (message != "") {
wx.showLoading({
title: message,
mask: true
})
} else {
wx.showLoading({
title: '数据加载中',
mask: true
});
}
}
}
if (url.substring(0, 1) == '/') {
url = url.substr(1);
}
// token存在直接使用,不存在为空
if (appJs) {
token = appJs.globalData.token;
appJs.globalData.privateKey = privateKey;
if (!token) {
token = wx.getStorageSync('token') || wx.getStorageSync('token');
appJs.globalData.token = token;
}
_token_ = token;
} else {
token = wx.getStorageSync('token') || wx.getStorageSync('token');
_token_ = token;
}
// url拼接token和__shop__
let __shop__ = wx.getStorageSync('organizationid') || '';
if (url.lastIndexOf("?") == -1) {
url = url + '?_token_=' + _token_ + '&__shop__=' + __shop__
} else {
url = url + '&_token_=' + _token_ + '&__shop__=' + __shop__
}
if (method == "GET") {
params.timestamp = timest();
params = objKeySort(params);
let str = Object.keys(params).map(function(key) {
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(params[key]));
}).join('&');
str = '_token_=' + _token_ + '&__shop__=' + __shop__ + '&' + str;
let sha256sign = encryptor.sign(str, rsa.Crypto.SHA256, "SHA256");
sha256sign = encodeURIComponent(sha256sign);
params.sign = sha256sign;
}
if (method == "POST" || method == "PUT") {
var aa = JSON.stringify(params);
let str = '_token_=' + _token_ + '&__shop__=' + __shop__ + '×tamp=' + timest() + aa;
let sha256sign = encryptor.sign(str, rsa.Crypto.SHA256, "SHA256")
sha256sign = encodeURIComponent(sha256sign);
url = url + '×tamp=' + timest() + '&sign=' + sha256sign;
}
if (method == "DELETE") {
let index = url.lastIndexOf("?");
let str = url.substring(index + 1, url.length) + '×tamp=' + timest() + JSON.stringify(params);
let sha256sign = encryptor.sign(str, rsa.Crypto.SHA256, "SHA256")
sha256sign = encodeURIComponent(sha256sign);
url = url + '×tamp=' + timest() + '&sign=' + sha256sign;
}
// uuid存在直接使用,否则存储本地使用新的
uuid = wx.getStorageSync('uuid');
if (!uuid) {
uuid = guid();
wx.setStorageSync('uuid', uuid);
}
var Device = "device/" + uuid
if (wx.canIUse('getAccountInfoSync')) {
const accountInfo = wx.getAccountInfoSync();
var MicroApp = accountInfo.miniProgram.version;
if (MicroApp) {
Device = Device + " microapp/" + MicroApp
}
}
wx.request({
url: baseURL.baseURL + url,
data: params,
header: {
'Content-Type': 'application/json',
'Abp.Tenantld': '2',
'authorization': token,
"Device": Device
},
method: method,
success: function(res) {
if (message != "") {
wx.hideLoading()
} else {
wx.hideLoading()
}
//请求成功
//判断状态码---errCode状态根据后端定义来判断
if (res.statusCode == 200) {
if (res.data.Result.Code == 0) {
resolve(res);
wx.hideLoading();
} else if (res.data.Result.Code == 401 && url != 'api/services/app/MemberSession/GetLoginState') {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '登录已过期,请重新登录',
icon: 'none',
duration: 1000,
mask: true
})
}, 500)
}
wx.removeStorageSync('OpenId');
wx.removeStorageSync('token');
appJs.globalData.token = ""
wx.removeStorageSync('MemberId');
reject();
wx.reLaunch({
url: '/pages/member/loginAndRegister/loginAndRegister',
})
} else if (res.data.Result.Code == 404 || res.data.Result.Code == 101) {
wx.hideLoading();
resolve(res);
} else {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: res.data.Result.Message,
icon: 'none',
duration: 2000,
mask: true
})
}, 500)
}
resolve(res);
}
wx.hideLoading();
} else if (res.statusCode == 401) {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '登录已过期,请重新登录',
icon: 'none',
duration: 2000,
mask: true
})
}, 500)
}
wx.removeStorageSync('OpenId');
wx.removeStorageSync('token');
appJs.globalData.token = ""
wx.removeStorageSync('skin');
wx.removeStorageSync('Router');
wx.removeStorageSync('Url');
reject();
wx.reLaunch({
url: '/pages/member/loginAndRegister/loginAndRegister',
})
} else {
wx.hideLoading();
wx.hideToast();
if (res.data.Error.Message) {
if (!hideToast) {
wx.showToast({
title: res.data.Error.Message,
icon: 'none',
duration: 2000,
mask: true
})
}
} else {
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '请求异常',
icon: 'none',
mask: true
})
}, 500)
}
}
//其他异常
reject('运行时错误,请稍后再试');
}
},
fail: function(res) {
wx.hideLoading();
if (!hideToast) {
setTimeout(function() {
wx.showToast({
title: '请求异常',
icon: 'none',
mask: true
})
}, 500)
}
//请求失败
reject(res);
},
complete: function(res) {},
})
})
}
module.exports = {
requestLoading: requestLoading
}
需求先执行getA在执行requestLoading
使用es6 的await/async