【发布时间】:2015-12-02 07:56:44
【问题描述】:
我有这 3 个 mssql 存储过程执行,它们每个都获取数据数组,并且每个都被推送到变量存储结果。
但是,在一天结束的时候,只会完成第一个和最后一个执行,并且在根函数完成后会完成中间执行,因此不会推送中间执行的数组值。
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)
}
});
我确实知道解决此问题的方法(同步调用),但我想知道更优雅的方法并希望对其进行简单的修复。
【问题讨论】:
-
为什么不并行执行所有三个 SP 调用,然后在它们全部完成后推送结果?
-
我还没学过异步库。我会试一试,看看效果如何。谢谢
-
我发现:github.com/petkaantonov/bluebird 很容易使用。
标签: node.js asynchronous