我有这段代码:
function asyncFunction (version, xmlConfig, resolve) {
var xmlFileName = "/path/to/file/file.xml";
fileService.generateXmlToFile(xmlFileName, xmlConfig, function(){
runningService.startApp(appDir, version, function(exitCode){
if (exitCode == 0) {
console.log("App " + version + " started");
multiJobService.runMultipleJobTypes(id, version, allJobsConfig, appDir, function(){
runningService.stopApp(appDir, version, function(exitCode){
if (exitCode == 0) {
console.log("App " + version + " stopped");
resolve();
} else {
console.log("App " + version + " failed to stop. Exit code " + exitCode);
}
});
});
} else {
console.log("App " + version + " failed to start. Exit code " + exitCode);
}
});
});
}
它启动我的应用程序的一个版本,运行各种测试,停止应用程序,启动应用程序的下一个版本,再次运行测试,最后停止应用程序。 目前,这按预期工作。
以下是 startApp 和 stopApp 函数:
startApp: function(appDir, version, callback) {
console.log("App " + version + " starting...");
var child = exec(
config.env().path.scripts + "/appstart.sh " +
appDir + " " +
version + " " +
"127.0.0.1"
);
child.stdout.on('data', function(data) {
console.log(data);
});
child.stderr.on('data', function(data) {
console.log(data);
});
child.on('close', function(code) {
callback(code);
});
},
stopApp: function(appDir, version, callback) {
console.log("App " + version + " stopping...")
var child = exec(
config.env().path.scripts + "/appstop.sh " +
appDir + " " +
version + " "
);
child.stdout.on('data', function(data) {
console.log(data);
});
child.stderr.on('data', function(data) {
console.log(data);
});
child.on('close', function(code) {
callback(code);
});
}
我想为此添加一些功能。这项工作的第一部分是确保应用程序已停止。为此,我希望只是交换调用startApp和stopApp函数的顺序。这是我的新代码:
function asyncFunction (version, xmlConfig, resolve) {
runningService.stopApp(appDir, version, function(exitCode){
if (exitCode == 0) {
console.log("App " + version + " stopped");
resolve();
} else {
console.log("App " + version + " failed to stop. Exit code " + exitCode);
}
});
var xmlFileName = "/path/to/file/file.xml";
fileService.generateXmlToFile(xmlFileName, xmlConfig, function(){
runningService.startApp(appDir, version, function(exitCode){
if (exitCode == 0) {
console.log("App " + version + " started");
multiJobService.runMultipleJobTypes(id, version, allJobsConfig, appDir, function(){
});
} else {
console.log("App " + version + " failed to start. Exit code " + exitCode);
}
});
});
}
当我运行它时,启动应用程序在停止应用程序完成之前开始。这会导致错误,其中 startApp 失败,因为检测到正在运行的应用进程。我该如何解决这个问题?
我在错误的位置关闭了停止应用程序。 当我将停止应用程序的});
移动到启动应用程序之后时,我的应用程序按预期工作。这是我更新的代码:
function asyncFunction (version, xmlConfig, resolve) {
runningService.stopApp(appDir, version, function(exitCode){
if (exitCode == 0) {
console.log("App " + version + " stopped");
resolve();
} else {
console.log("App " + version + " failed to stop. Exit code " + exitCode);
}
var xmlFileName = "/path/to/file/file.xml";
fileService.generateXmlToFile(xmlFileName, xmlConfig, function(){
runningService.startApp(appDir, version, function(exitCode){
if (exitCode == 0) {
console.log("App " + version + " started");
multiJobService.runMultipleJobTypes(id, version, allJobsConfig, appDir, function(){
});
} else {
console.log("App " + version + " failed to start. Exit code " + exitCode);
}
});
});
});
}