我有这3个mssql存储过程执行,每个都获得数据数组,并且每个数据都被推送到变量storedresults。
但是,在一天结束时,只完成第一次和最后一次执行,并在完成根函数后完成中间执行,因此不会推送中间执行的数组值。
function merchantGetSetting(inputData, callback) {
storedgetSettingProcedure.exec(function(error, results) {
if (error) {
winston.info("ERROR WITH EXECUTING GET SETTING STORED PROCEDURE: " + JSON.stringify(error));
}
else {
winston.log('info', "SUCCESSFULLY EXECUTED GET SETTING STORED PROCEDURE");
storedresults.push([results]);
}
});
storedgetIntegrationProcedure.exec(function(error, results) {
if (error) {
winston.info("ERROR WITH EXECUTING GET SETTING STORED PROCEDURE: " + JSON.stringify(error));
}
else {
winston.log('info', "SUCCESSFULLY EXECUTED GET INTEGRATION STORED PROCEDURE");
storedresults.push([results]);
}
});
storedgetAccoutListProcedure.exec(function(error, results) {
if (error) {
winston.info("ERROR WITH EXECUTING GET SETTING STORED PROCEDURE: " + JSON.stringify(error));
}
else {
winston.log('info', "SUCCESSFULLY EXECUTED GET MERCHANT LIST STORED PROCEDURE");
storedresults.push([results]);
callback(null, storedresults)
}
});
我知道一种解决此问题的方法(同步调用),但我想知道更优雅的方式,并希望对它进行简单的修复。
答案 0 :(得分:0)
因为我知道只有中间存储过程执行太晚了,所以我在该函数上使用了process.nextTick,并将回调函数从最后一个函数转移到app.js,就像这样。
process.nextTick(function() {
storedgetIntegrationProcedure.exec(function(error, results) {
if (error) {
winston.info("ERROR WITH EXECUTING GET SETTING STORED PROCEDURE: " + JSON.stringify(error));
}
else {
winston.log('info', "SUCCESSFULLY EXECUTED GET INTEGRATION STORED PROCEDURE");
storedresults.push([results]);
callback(null, storedresults)
}
});
}
这个过程.nextTick确保中间函数最后完成,我能够获得我想要的数据。
我仍然愿意接受更多建议,但这是我想过的最简单的解决方案。
答案 1 :(得分:0)