NodeJS HTTP请求承诺并将结果存储在变量中

时间:2018-10-27 20:30:00

标签: node.js promise

我正在构建一个前端应用程序,该程序向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响应的组合来发送响应。最简单的方法是什么?

2 个答案:

答案 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();
    }
}