返回对 2 个承诺的响应

Returning the responses to 2 promises

我正在使用 Contenful 来管理内容,并使用 API 和 node.js 来呈现内容。但是,(我怀疑这个问题可能适用于发出 2 个请求并且需要 returned 合并结果的任何地方)但是我如何 return 将 2 个承诺的数据放在一起?

我有 2 个 collections、页面和新闻。

我想 return 一个特定的页面和所有新闻,我可以分别做这两个,一点问题都没有。

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
});

我该怎么做?

您可以并行执行请求,方法是同时启动它们并使用 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 等待所有承诺得到履行,然后将这些分辨率值作为一个数组履行其承诺,其顺序与其接收到的数组中的条目相同(或拒绝其中一个承诺拒绝,传递拒绝原因)。