Вы ожидаете функцию, которая не является асинхронной c.
Посмотрите на это объявление функции.
exports.function2 = () => {
Теперь посмотрим, как вы его используете.
const result = await this.function2();
Вы видите проблему? Если вы этого не сделаете, вы используете await для функции, которая не является асинхронной, или, другими словами, вы не ждете, пока функция завершит работу sh. Чтобы решить эту проблему, вам нужно сделать следующее:
const ytdl = require("ytdl-core");
exports.function1 = async () => {
const result = await this.function2();
if (!result) return console.log("result not found in function1");
};
exports.function2 = async () => {
return this.function3();
};
exports.function3 = () => {
return new Promise((resolve, reject) => {
ytdl.getInfo(/*URL For any Youtube video*/, (error, result) => {
if (error) return reject(error);
resolve(info && console.log("found result in function3"));
});
});
};
Кроме того, обратите внимание, что функция 3 теперь возвращает обещание. Вы можете использовать обещание, как кто-то, упомянутый выше, но если вы не хотите этого, вам нужно заключить вызов ytdl в обещание. Возврат внутри функции обратного вызова не возвращается из родительской функции; Лучше всего использовать обещание или передать функцию обратного вызова в функцию.