如何使Async API工作?

时间:2016-11-25 12:58:00

标签: javascript node.js express firebase firebase-realtime-database

我目前正在为我的机构开发应用程序并遇到以下问题。 我想允许用户检查数据库中的一些东西(目前使用firebase)。由于我必须从外部服务器检查一些东西,我设置了一个node.js服务器来发送更改的通知。我想将此服务器用作Firebase和App之间的链接,以满足更复杂的要求。

对于我的节点服务器和应用程序之间的门,我用快递...... 我设置了基本的东西,但发生了以下问题,我不知道如何解决这个问题......

例如,我打开API登录用户帐户,因此我向服务器发送了带有用户名和身份验证令牌的请求。但现在问题出现了。由于服务器必须从Firebase进行检查,因此我无法对该值进行任何操作,因为我不知道何时获取它,而且我不知道如何使用异步执行此操作。

如果有人知道怎么做,这对我有帮助。如果这个上面的场景是混淆一个简单的事情:

当我收到请求(快递)时,如何从Firebase发送值...并在价值加载后发送请求?

如果有必要,我愿意更改数据库,例如MongoDB或其他方面的帮助。

1 个答案:

答案 0 :(得分:1)

像这样的问题的一般解决方案是这样的:

app.post('/login', function (req, res) {
  makeAsyncCall('some arguments...', function (err, data) {
    if (err) {
      // you have error, send an appropriate error
      // to the client with `res.send`
    } else {
      // you have `data`, check it and use `res.send`
      // to send response to the client
    }
  });
});

因此,在处理程序内部运行一个异步函数,该函数接受回调,并在该回调中创建对原始HTTP请求的响应。

makeAsyncCall可以是对其他服务器或数据库查询或其他任何内容的另一个HTTP请求。甚至可能是超时:

app.get('/delay', function (req, res) {
  setTimeout(function () {
    req.send('Done');
  });
}, 3000);

在内部回调中,您仍然可以访问定义它们的外部函数的参数 - 特别是reqres个对象。