Я использую Contenful для управления контентом и использую API с node.js для рендеринга контента. Однако (и я подозреваю, что этот вопрос, вероятно, применим для любого случая, когда выполняются 2 запроса, и необходимо вернуть объединенный результат), но как мне вернуть данные двух обещаний вместе?
У меня есть 2 коллекции, Страница и Новости.
Я хочу вернуть определенную страницу и все новости, и я могу сделать и то, и другое по отдельности, вообще никаких проблем.
var pageData;
client.getEntry('Homepage')
.then(function (entry) {
pageData = entry.fields;
res.render('index', {
pageData
});
})
а также
var pageData;
client.getEntries({'content_type':'news'})
.then(function (entries) {
pageData = entries;
res.render('index', {
pageData
});
})
однако я хотел бы получить что-то похожее на это:
// Get the page
...
// Get the news items
...
res.render('index', {
pageData,
news
});
Как мне это сделать?
🤔 А знаете ли вы, что...
JavaScript позволяет создавать расширения для веб-браузеров, улучшая их функциональность.
Вы можете выполнять запросы параллельно, запустив их оба и используя Promise.all
, чтобы дождаться их завершения:
Promise.all([
client.getEntry('Homepage'),
client.getEntries({'content_type':'news'})
])
.then(([pageData, news]) => {
// Use `pageData` and `news` here
})
.catch(error => {
// One of them failed, handle/display error
});
Promise.all
ожидает выполнения всех обещаний, а затем выполняет свое обещание с этими значениями разрешения в виде массива в том же порядке, что и записи в массиве, который он получает (или отклоняет, когда одно из обещаний отклоняется, передавая причину отклонения) .