Возврат ответов на 2 обещания

Я использую 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 позволяет создавать расширения для веб-браузеров, улучшая их функциональность.


1
49
1

Ответ:

Решено

Вы можете выполнять запросы параллельно, запустив их оба и используя 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 ожидает выполнения всех обещаний, а затем выполняет свое обещание с этими значениями разрешения в виде массива в том же порядке, что и записи в массиве, который он получает (или отклоняет, когда одно из обещаний отклоняется, передавая причину отклонения) .