使用nodejs正确处理后端调用(sync / async?)

时间:2014-10-22 13:47:36

标签: javascript node.js asynchronous

所以我在这里阅读了一些相关的问题以及关于如何使用带有异步回调等的nodejs的文章。我想我已经明白我必须摆脱将我的应用程序编写为一系列同步语句,而是作为松散的回调集合调用回调。

现在我的情景: 我正在使用nodejs来处理请求,该请求又打开与后端服务器的连接以获取标记。此标记对于此请求有意义至关重要。所以我想只在后端返回标记时才将响应返回给客户端。这听起来像是同步调用的用例。但是当我打开与后端的连接时,我不知道如何让我当前的请求等待后端请求返回。 如果在提交响应后有一些很好的解决方案可以将内容发送给客户端,那么我该如何做呢?

2 个答案:

答案 0 :(得分:1)

不,打开连接,发送请求和等待响应本身就是异步任务。您希望服务器在此期间执行其他操作(例如,并行多次处理此任务),因此您不希望阻止同步调用。

改为使用回调;基本上像

on("frontend-request", function(request, response) {
    fetch("backend-markup", function(markup) {
        response.write(markup);
    });
});

答案 1 :(得分:1)

你需要做的是从回调内部返回响应

app.get('/', function(req, res) {
    someAsyncCall(function(html) {
        res.write(html);
        res.end();
    });
});

请求将一直阻塞,直到调用end()为止,这意味着在返回标记之前不会返回任何内容。同时,在等待someAsyncCall完成时,该过程可以自由处理后续请求。