У меня есть функция translateCommand (команда), которая использует пакет Translate из npm для перевода некоторого текста на другой язык.Проблема заключается в том, что функция translate, предоставляемая этим пакетом, является асинхронной и имеет тенденцию выходить из функции translateCommand до завершения функции translate, что приводит к возврату мусорных данных.и сделал translateCommand (command) асинхронной функцией, чтобы я мог использовать await перед импортированной функцией translate (), которая решила эту проблему, но теперь я просто отложил проблему еще на шаг назад, потому что функция, которая вызывает translateCommand(команда) испытывает точно такую же проблему, и я чувствую, что не добился прогресса, если мне просто придется продолжать повторять эту цепочку вверх.
Дело в том, что я недействительно понимают обещания и то, как асинхронные функции ведут себя в целом по отношению к ним.Я понимаю, что это предпосылка, которая делает Node.js великолепной, но попытка узнать об этом была довольно неэффективной.Попытка решить эту проблему на самом деле не принесла плодов, поскольку все говорят, что используют обратный вызов, не объясняя, что такое обратный вызов.Не помогает, что примеры, как правило, были окружены незнакомым кодом, поэтому я подумал, что получение помощи в контексте моего кода будет касаться двух зайцев одним выстрелом.
Весь этот процесс - моя вводная попытка сделатьглупый Discord Bot, где я реализовал кучу глупых функций.Я много раз сталкивался с асинхронной стеной, но обычно находил синхронную альтернативу, чтобы двигаться вперед.На этот раз я этого не сделал, и я попытался эмулировать обратные вызовы, описанные в других публикациях Stack Overflow, но из-за недостатка понимания не смог правильно их интегрировать (я могу только предположить).
Импортированная функция верхнего уровня, которая теперь имеет проблему асинхронности.
client.on("message", (message) => {
// ...
let command = (message.content).substr(1);
// ...
// Handles translate command
else if (command.startsWith("translate"))
message.channel.send(translateCommand(command));
// ...
}
});
Функция, которая была сделана асинхронной, поэтому она может ожидать:
// Form !translate [string]
async function translateCommand(command) {
let message = "";
let str = command.substr(10);
await translate(str, { to: 'ja', engine: 'yandex', key: '<my key>' }).then(function(result) {
message = result;
return "";
});
return message;
}
Я в курсеэтот вопрос был задан до смерти, но я чувствую, что без контекста, который я понимаю (так как я все еще новичок в JS и Node), я могу продолжить, только ударив головой о стену, пока что-то не сработает, и я не пойму почему.