Почему цепочка обещаний не работает здесь, в Node.js?

У меня есть скрипт, который очищает веб-сайт и должен отправлять данные обратно клиенту... ПРОСТО ЧТОБЫ ВЫ ЗНАЛИ, ЧТО ЭТО ВСЕ ВНУТРИ app.get

Вот код... Второй .then не работает. Предполагается, что массивы отправляются клиенту после того, как они были заполнены после того, как cheerio перебрал их. Тем не менее, это не работает ... Может быть, что-то не так с тем, как я настроил второе обещание? Пожалуйста помоги.

  axios.get("https://www.sciencenews.org/").then(function(response){
     var $ = cheerio.load(response.data);
     $("div.field-item-node-ref").each(function(i,element){
       if ($(element).children('.ad').length == 0 && $(element).children('article').length > 0) {
                    array1.push($(element).find('h2.node-title').text());
                    array2.push($(element).find('div.content').text());
 array3.push(`https://www.sciencenews.org${$(element).find('a').attr('href')}`);
                    array4.push(`${$(element).find('img').attr('src')}`);
                 }
            })
        }).then(()=>{
            res.send({titles:array1,summaries:array2,links:array3,base64img:array4});
         })

"не работает" что именно?

Jonas Wilms 27.05.2019 19:21

не отправляет данные клиенту, говорит, что произошла ошибка (необработанный отказ)

OlegArsyonov 27.05.2019 19:26

типо? res не определено, но response есть

Steven Stark 27.05.2019 19:33

Да, добавьте .catch(e => console.error(e)), чтобы получить реальную ошибку.

Jonas Wilms 27.05.2019 19:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В предоставленном фрагменте кода ни один из массивов не объявлен, и нет объекта res для вызова «отправить», поскольку ни один из них не передается в функцию.

Как только массивы объявлены, а res временно заменен на console.info, похоже, он работает с моей стороны.

Рабочий Repl.it

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

Другие вопросы по теме