.forEach () ничего не печатает в EJS

Имейте этот файл .ejs, который просматривает объект и извлекает некоторые данные из API. После получения данных он ничего не делает.

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

Вот код:

<div class = "bg-white jumbotron no-shadow">
    <div class = "container">
        <div class = "row">
            <div class = "col-md-6 col-sm-12">
                <%
                    if (apiResults.featured.male){
                        %>
                            <div class = "row">
                                <%
                                Array.from(apiResults.featured.male).forEach((profile) => {
                                helper.api.getPhotoByKey(profile.photoKey)
                                    .then(photoURL => {
                                        %>
                                            <div class = "col-xs-4">
                                                <img src = "<%= photoURL%>">
                                            </div>
                                        <%
                                    })
                                    .catch(err => console.info(err))
                                })%>
                            </div>
                        <%
                    }
                %>  
            </div>
        </div>
    </div>
</div>

Я новичок в EJS и NodeJS, может ли кто-нибудь помочь мне в этом? Спасибо

Это неправильный подход; сначала вы получаете результаты в обработчике экспресс-маршрутов с помощью Promise.all(), а затем передаете их в шаблон.

Chris G 02.10.2018 11:23
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
212
1

Ответы 1

Ваши асинхронные вызовы не завершатся до тех пор, пока шаблон не будет отрисован. Вам нужно собрать эти данные вместе до вы визуализируете шаблон, например:

Promise.all(
    Array.from(apiResults.featured.male)
    .map((profile) => helper.api.getPhotoByKey(profile.photoKey))
    )
    .then(photoURLs => {
        // Add them to your data and call ejs.render...
    });

...или похожие.

Promise.all() гарантирует, что все обещания успешно выполнены?

Nadir Abbas 02.10.2018 11:28

@ НадирАббас - Да. Он возвращает обещание, которое либо отклоняется, если какое-либо из входных обещаний отклоняется, либо разрешается с массивом результатов, если разрешаются все входные обещания. См .: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

T.J. Crowder 02.10.2018 11:40

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