我遇到了nodejs程序的一些问题。我想要做的就是使用ssh连接从其他服务获取状态。 我的原始代码如下,它有效,但我想让它更容易理解。
function stopConnect() {
const ContainerName = paths.getConnectService();
const password = 'root';
return new Promise((resolve, reject) => {
getActiveState()
.then((response) => {
if (response === 'inactive') {
// ssh connection
ssh.connect({
host: 'localhost',
username: 'root',
password,
port: 62222
})
.then(() => {
//execute ssh command and wait for response
ssh.execCommand(`application stop ${ContainerName}`)
.then(() => {
resolve('stop docker container successfully');
});
})
}
})
});
}
我想减少巢的复杂性以保持忠诚。所以我尝试将它分成两个函数," stopConnect"和" sshCommandFunction"如下。
function stopConnect() {
const ContainerName = paths.getConnectService();
return isRunning()
.then((isRunning) => {
if (isRunning) {
ssh.connect({
host: 'localhost',
username: 'root',
password: 'root',
port: 62222
})
.then((
) => {
return sshCommandFunction();
})
}
});
}
function sshCommandFunction() {
const ContainerName = paths.getConnectService();
return ssh.execCommand(`application stop ${ContainerName}`)
.then(() => {
return Promise.resolve();
}).catch((error) => {
return Promise.reject(new Error(error));
});
}
我遇到了一个问题" sshCommandFunction"返回" undefined"总是。 我的代码有什么问题吗?任何评论将不胜感激。
答案 0 :(得分:1)
Promise.resolve();
与Promise.resolve(undefined);
所以这就是你从中获得未定义的地方。
如果要从execCommand返回值(如果只有一个),请使用此函数:
function sshCommandFunction() {
const ContainerName = paths.getConnectService();
return ssh.execCommand(`application stop ${ContainerName}`)
.then((a) => {
return Promise.resolve(a);
}).catch((error) => {
return Promise.reject(new Error(error));
});
}
甚至更好,返回execCommand返回的内容:
function sshCommandFunction() {
const ContainerName = paths.getConnectService();
return ssh.execCommand(`application stop ${ContainerName}`)
.catch((error) => {
return Promise.reject(new Error(error));
});
}