1.使用Generator函数解决回调嵌套
let logger = require('../config/common').logger;
let connect = require('../config/common').connect;
/*函数1 返回Promise对象*/
let getSlotCapPromise = function(){
return new Promise((resolve, reject) => {
let sql = "select item_value from tbl_ft_sys tfs where tfs.item_name='DISC_CAPACITY'";
connect.query(sql,function (err,results) {
if(err){
logger.error(err);
reject(err);
}
else{
console.log(results[0].item_value)
// return results[0].item_value;
resolve(results[0].item_value);
}
});
});
}
/*函数2 返回Promise对象*/
let getDiscLibCapPromise = function (slotCap) {
return new Promise((resolve,reject)=>{
let sql = 'SELECT disc_type as "discType",COUNT(*) as "discNum", ROUND(SUM(rest_cap)/(1024*1024*1024),2) as "discRestCap" '+
'FROM tbl_slots ts JOIN tbl_magzines tm ON ts.mag_id = tm.mag_id WHERE '+
'tm.mag_order IS NOT NULL AND ts.disc_type != 0 AND LENGTH(ts.disc_type) > 0 GROUP BY ts.disc_type';
connect.query(sql,function (err,results) {
if(err){
logger.error(err);
reject(err);
}
else{
let res = new Object();
res.totalinfo=0;
res.usedinfo=0;
let totalDisc=0;
for(let i=0;i<results.length;i++){
totalDisc+=results[i].discNum;
if(results[i].discType==2){//使用完封盘
res.usedinfo +=results[i].discNum*slotCap;
}
else if(results[i].discType==3){//有剩余
res.usedinfo+=slotCap-results[i].discRestCap;
}
}
res.totalinfo = slotCap*totalDisc;
resolve(res);
}
});
});
}
/*定义产生式函数 将函数1的返回值作为参数传入函数2*/
function *getDiscLibCap(){
let slotCap = yield getSlotCapPromise();
let rr = yield getDiscLibCapPromise(slotCap);
}
/*定义 执行产生式函数步骤*/
function test() {
let hw = getDiscLibCap();//获得产生式函数指针
let res1 = hw.next();//执行第一个yield语句
res1.value.then(function (data) {//data为resolve函数的返回值
console.log("data="+data)
return hw.next(data).value;//将第一个函数的返回值作为参数传入第二个函数
}).then(function (data2) {//获取第二个函数的返回值
console.log("data2="+JSON.stringify(data2));
});
}
test();//执行函数
2.使用async 和 await 解决回掉嵌套
let p1 = function(x1){
return new Promise(function (resolve,reject) {
resolve(x1);
});
}
let p2 = function(x2){
return new Promise(function(resolve,reject){
resolve(x2);
})
}
let p3 = function(x1,x2){
return new Promise(function(resolve,reject){
resolve(x1+x2)
})
}
/*定义异步函数*/
async function testAsync(){
let v1 = await p1(1);
console.log(v1) //输出1
let v2 = await p2(2);
console.log(v2) //输出2
let v3 = await p3(v1,v2);
console.log(v3) //输出3
}
let pp = testAsync() //执行async函数