Функция не вызывается, когда она должна быть в приложении узла

Я пытаюсь вызвать reverseEncryptionфункцию всякий раз, когда отрицательное число передается в приглашение в узле. К сожалению, console.logотображается, но reverseEncryptionне делает. Например, если я шифрую helloс ключом 2результата uqiim. Если, если затем пройти через приложение снова, но расшифровать uqiimс ключом -2I want the reverseEncryptionfunction called and producing hello.

//Caesar cipher in node
var inquirer = require("inquirer");

inquirer.prompt([
  {
    type: "input",
    name: "message",
    message: "Write the message you would like to encrypt:"
  },
  {
    type: "input",
    name: "key",
    message: "Enter a number between 0 and 25"
  }
]).then(function(encrypted) {

  var newMessage = '';

  if (encrypted.key < 0) {
    console.log("cypher key is negative");
    reverseEncryption();
  } else {
    console.log("cypher key is " + encrypted.key)

    for (var i = 0; i < encrypted.message.length; i++) {
      var newKey = encrypted.message[i];

      //if (newKey.match(/[a-z]/i)){
      var newCode = encrypted.message.charCodeAt(i);

      if ((newCode >= 65) && (newCode <= 90)) {
        newKey = String.fromCharCode(((newCode - 65 + encrypted.key) % 26) + 65);
      } else if ((newCode >= 97) && (newCode <= 122)) {
        newKey = String.fromCharCode(((newCode - 97 + encrypted.key) % 26) + 97);
      }
      //}
      newMessage += newKey;
    }
  }
  console.log(newMessage);
});



var reverseEncryption = function() {
  var reverseMessage = "";

  for (var i = 0; i < encrypted.message.length; i++) {
    var reverseKey = encrypted.message[i];

    //if (newKey.match(/[a-z]/i)){
    var reverseCode = encrypted.message.charCodeAt(i);

    if ((reverseCode >= 65) && (reverseCode <= 90)) {
      reverseKey = String.fromCharCode(((reverseCode - 65 + (encrypted.key + 26)) % 26) + 65);
    } else if ((reverseCode >= 97) && (reverseCode <= 122)) {
      reverseKey = String.fromCharCode(((reverseCode - 97 + (encrypted.key + 26)) % 26) + 97);
    }
    reverseMessage += reverseKey;
  }
  console.log(reverseMessage);
};

1 ответ

  1. Ваша проблема в том, что вы не передаете encryptedсвою функцию, которую вы храните reverseEncryption. В пределах этой функцииencrypted, и из-за этого ваш сценарий не будет работать.

    При использовании обещаний вы всегда должны использовать a catchв конце цепочки, чтобы проверить, была ли ошибка или нет.

    inquirer.prompt([
      {
        type: "input",
        name: "message",
        message: "Write the message you would like to encrypt:"
      },
      {
        type: "input",
        name: "key",
        message: "Enter a number between 0 and 25"
      }
    ]).then(function(encrypted) {
       // the res of you code
    })
    .catch(function(err) {
      console.error(err);
    });
    

    Этот .catchобратный вызов сообщил бы: [ReferenceError: encrypted is not defined]

    Для решения этой проблемы необходимо вызвать функцию unction reverseEncryption(encrypted);с помощью параметра function (encrypted) { }