Раз тут идёт речь про всю это лапшу, то может мне кто-то может объяснить.
У меня есть несколько слудующих друг за другом действий, причём надо дождаться, пока завершится предыдущая операция, прежде чем можно делать дальше.
1. Проверить, работает ли ssh соеденение
2. Проверить, работает ли ssh соеденение к другому серверу
3. Выполнить следующий шаг
Функция:
backupRun.prototype.checkSSHConnection = async function (serverName) {
var self = this;
var exec = self.bConfig.clientserver[self.eServer]
var client = self.bConfig.clientserver[serverName]
return new Promise((resolve, reject) => {
self.runUnderSSH("hostname", self.sshkey, exec, client)
.then((sshOutput) => {
return resolve(sshOutput);
}, (sshOutputErr) => {
return reject(sshOutputErr)
})
})
};
Чтобы пройти все три шага у меня сделанно так
backupJob.checkSSHConnection(program.exec) //check ssh to exec server
.then((response) => {
logger.debug("SSH test connection to exec " + program.exec + " successfull");
backupJob.checkSSHConnection(program.server) //check ssh connection to backup server
.then((response) => {
logger.debug("SSH test connection to backup server " + program.exec + " successfull");
backupJob.createBackupPrePostCommands('prerun') //create backup server prerun commands
.then((backupPreRun) => {
logger.debug("Create backup prerun commands");
}, (err) => {
logger.error("Error: config array was not generated " + err);
})
})
})
}, (error) => {
logger.error("SSH test connection to backup server " + program.exec + " failed: " + error);
})
}, (error) => {
logger.error("SSH test connection to exec " + program.exec + " failed: " + error);
});
То есть та же лапша, но только с async/await.
Теперь собственно вопрос, можно это как-то по другому сделать или от этого никуда не уйти? Причём это всё выглядит при callback, promise и async/await примерно одинаково.
Всю это полностью можно увидеть
тут