我正在构建一个前端应用程序,该程序向2个单独的API发出HTTP请求。
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint}
我有一条路由向这些API发出请求,然后返回这些响应:
http://greetings_api:3000/getGreeting
data {'language': 'es'}
Response: 'Hola'
http://users_api:3000/getUser
data {'userid': 1}
Response: 'Jose Smith'
因此,使用当前代码,我可以在控制台中获得正确的输出。问题是我需要能够通过路由和两个API响应的组合来发送响应。最简单的方法是什么?
答案 0 :(得分:1)
您需要发出2个并行请求,并在完成两个请求之后发送响应。这里的Promise.all功能可以为您提供帮助。
Promise.all([myUser(), myGreeting()]).then(function(result) {
// result[0] - user
// result[1] - greeting
res.send(result[0] + ' ' + result[1]);
});
答案 1 :(得分:1)
您要在承诺解决之前发送答复。
使用async/await,我们可以编写外观和行为类似于同步的异步代码。
async function getWelcome(req, res) {
// we can wrap our operation in a try/catch block to handle
// both asynchronous and synchronous errors
try {
// with the await keyword we can wait for all promises to resolve
// before we continue with our code
/* if one of the promises inside Promise.all rejects we move to the catch block */
const [user, greeting] = await Promise.all([
myUser(),
myGreeting()
]);
// send the response if no errors
res.send(greeting + ' ' + user);
catch(e) {
res.status(404).send();
}
}