Проблема реализации функции обратного вызова - PullRequest
0 голосов
/ 17 апреля 2019

Я работал над множеством проблем, призванных помочь понять функции обратного вызова. Я понимаю, что это обратный вызов, если функция вызывается после события, но я не уверен, как она работает в этом случае.

У меня есть цикл, который проходит через переданный массив и запускает функцию шифрования.

const cipher = require('./cipher')

exports.encrypt = function(text, callback) {
  cipher.encrypt(text, callback)
}

exports.decrypt = function(text, callback) {
  cipher.decrypt(text, callback)
}

exports.encryptMultiple = function(textArray, callback) {
  // 1. For each string in the textArray call exports.encrypt to encrypt the string
  // 2. Each encrypt must be run in parallel
  // 3. If one encrypt fails then call the callback immediately with the error as the first parameter
  // 4. If all encrypts succeed then return an array of encrypted strings. They must be in the same order as received.

  //what I have so far
  let encrypted = []

  textArray.forEach(element => {
    encrypted.push(cipher.encrypt(element))
  });

}

Ожидаемый результат - массив зашифрованных значений. В настоящее время я получаю массив, где каждый элемент не определен.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Здравствуйте, шифр npm, который вы используете, не принимает второй параметр посмотрите, нажав здесь !. Нет необходимости использовать экспорт для функций, используемых в том же файле. посмотрите на экспорт здесь !.

вместо

exports.encrypt = function(text, callback) {
  cipher.encrypt(text, callback)
}

exports.decrypt = function(text, callback) {
  cipher.decrypt(text, callback)
}

Вы можете просто реализовать

encrypt = function(text){
 cipher.encrypt(text);
}

decrypt = function(text, callback) {
  cipher.decrypt(text);
}

И вызвать эти функции внутри forEach. Что касается понимания обратных вызовов, рассмотрим приведенный ниже пример

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}
function alertFinished(){
  alert('Finished my homework');
}
doHomework('math', alertFinished);

Пожалуйста, обратитесь нажмите здесь !

0 голосов
/ 17 апреля 2019

Во-первых, вы можете предоставить больше контекста в вашем вопросе. Во-вторых, я полагаю, что обратные вызовы немного запутаны. Обратные вызовы - это просто помещенные функции, которые могут быть переданы другим функциям, которые будут их выполнять. В этом есть много чего, но это самое простое объяснение, которое я могу дать. Из того, что я понимаю, вы хотите выполнить обратный вызов, если есть исключение. Это может быть то, что вы ищете.

try {
  //Execute your code here.
  cipher.encrypt(element);
}
catch(error) {
  callback();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...