Node.js Функция не определена - PullRequest
1 голос
/ 25 мая 2020

Я пишу код, который анализирует HTML, полученный с веб-страницы, и у меня проблема, когда моя функция возвращает undefined.

function getVideoUrl(category) {
    PathLoader.load(config.category_url + category['id']).then(function(document) {
        let soup = new JSSoup(document);
        let tag = soup.findAll("li");

        tag.forEach((tag) => {
            if (tag.attrs.class) {
                if (tag.attrs.class.startsWith("pcVideoListItem")) {
                    return config.view_video_url + tag.attrs['_vkey'];
                }
            }
        });
    });
}

let random_category = getRandomCategory();
let video_url = getVideoUrl(random_category);

console.log(video_url);

Функция getVideoUrl() - это та функция, которая возвращает undefined, как вы уже догадались. Я совершенно запутался.

1 Ответ

0 голосов
/ 25 мая 2020

Вы ничего не возвращаете из метода getVideoUrl. forEach проходит через массив элементов, но не возвращает ничего выше него.

Я думаю, что вам следует использовать find вместо forEach.

Попробуйте:

const tags = soup.findAll("li");
const matchedTag = tags.find(tag => tag.attrs.class && tag.attrs.class.startsWith("pcVideoListItem"));
const videoUrl = matchedTag ? `${config.view_video_url}${matchedTag.attrs['_vkey']}` : '';

Кроме того, используйте let только в том случае, если вы намереваетесь изменить значение переменной. В противном случае всегда используйте const.

...