nodejs ssh连接使用Promise返回错误的值

时间:2018-03-05 11:56:06

标签: node.js promise

我遇到了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"总是。 我的代码有什么问题吗?任何评论将不胜感激。

1 个答案:

答案 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));
            });
    }