NodeJs多次执行功能而没有延迟

时间:2017-01-13 06:21:40

标签: node.js

我将直接分享代码

app.get('/ListBooks', function (req, res) { 
console.log("Function called");
//internally calls another URL and sends its response to browser
request({
    url:  'someURLinRESTServer',
    method: 'POST',
    json: MyJsonData

}, function (error, response, body) {
    if (error) {
        console.log("/Call Failed ->" + error);
        res.status(200).send('Failed');

    } else {
        console.log("/Call got Response");
        console.log(response.statusCode, body);
        res.send(body); res.end();
    }

})

现在,当浏览器在http://localhost/ListBooks

上生成请求时

我的节点控制台显示第一条消息"函数调用"并等待内部REST URL响应

仅当 REST SERVER已关闭

时才会出现真正的问题

然后,如果我尝试从另一个浏览器选项卡调用http://localhost/ListBooks节点服务器控制台不显示任何更改,并且只有在前一个函数REST CALL调用的repsonse之后,它才会在app.get上显示第二个函数调用的控制台消息( ' / ListBooks'

我认为节点js在这里制作异步函数我不希望函数等待这样的多个实例调用

或者只是打印消息的延迟,每个函数调用都单独执行.Plz澄清......

1 个答案:

答案 0 :(得分:0)

如果仅在REST服务器关闭时发生(正如您的注释所示),那么这只是您对request()的调用失败的时间的函数。并且,对request()的每次单独调用都会经历自己尝试连接的循环,然后最终超时。如果两者都超时,那么你将发出request1,然后发出request2,然后一些超时时间将通过,request1将失败,然后request2将在它之后不久发生故障。这与express如何处理多个请求以及与REST服务器的调用行为方式无关。

如果您希望缩短等待响应的时间,可以为timeout设置request()选项,但是您确实需要确保不要将其缩短到如此繁忙的REST服务器,只需要一点时间来实际响应就会超时。

  

或者只是打印消息和每个函数调用的延迟   单独执行

每个电话都是完全独立的。 node.js或Express没有对这些响应进行序列化。序列化的出现只是因为它们都会花费相同的时间来超时失败,因此它们会一个接一个地失败。