将回应返回2个诺言

时间:2019-07-07 10:23:50

标签: javascript node.js contentful

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

我有2个收藏集,即Page和News。

我想返回特定的页面和所有新闻,并且我可以分别完成这两个操作,完全没有问题。

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以通过同时启动两个请求并使用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等待所有诺言被兑现,然后将这些分辨率值作为一个数组以与接收到的数组中条目相同的顺序作为数组来兑现其诺言(或在其中一个诺言被拒绝时拒绝,并提供拒绝原因)。