返回对 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
等待所有承诺得到履行,然后将这些分辨率值作为一个数组履行其承诺,其顺序与其接收到的数组中的条目相同(或拒绝其中一个承诺拒绝,传递拒绝原因)。
我正在使用 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
等待所有承诺得到履行,然后将这些分辨率值作为一个数组履行其承诺,其顺序与其接收到的数组中的条目相同(或拒绝其中一个承诺拒绝,传递拒绝原因)。