Имейте этот файл .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, может ли кто-нибудь помочь мне в этом? Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваши асинхронные вызовы не завершатся до тех пор, пока шаблон не будет отрисован. Вам нужно собрать эти данные вместе до вы визуализируете шаблон, например:
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() гарантирует, что все обещания успешно выполнены?
@ НадирАббас - Да. Он возвращает обещание, которое либо отклоняется, если какое-либо из входных обещаний отклоняется, либо разрешается с массивом результатов, если разрешаются все входные обещания. См .: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Это неправильный подход; сначала вы получаете результаты в обработчике экспресс-маршрутов с помощью
Promise.all(), а затем передаете их в шаблон.