如果花费太长时间,NodeJS功能会超时吗?

时间:2017-09-26 07:44:10

标签: javascript node.js callback async-await

我有一些第三方API运行大约需要30分钟才能返回结果的函数(它们会进行一些冗长的计算)。 现在,如果我使用Nodejs通过适当的回调调用这样的API,默认情况下Nodejs会等待30分钟让函数返回结果还是会超时? 如果超时,有没有办法增加等待时间?

2 个答案:

答案 0 :(得分:3)

我假设您使用express如果您使用快递,则可以添加以下代码以增加等待时间。

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});
server.timeout = 1000;

或者您可以使用纯http

var http = require('http');
var server = http.createServer(function (req, res) {
  setTimeout(function() {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }, 200);
}).listen(1337, '127.0.0.1');

server.timeout = 20;

答案 1 :(得分:2)

Linux的默认值可以使用20秒到120秒之间的任何内容作为超时 http://www.sekuda.com/overriding_the_default_linux_kernel_20_second_tcp_socket_connect_timeout

根据您使用的请求库,您可能在设置超时时使用不同的语法。我个人非常喜欢request,请参考https://github.com/request/request

request.get('http://10.255.255.1', {timeout: 1500}, function(err) {
    console.log(err.code === 'ETIMEDOUT');
    // Set to `true` if the timeout was a connection timeout, `false` or
    // `undefined` otherwise.
    console.log(err.connect === true);
    process.exit(0);
});

我不认为NodeJS功能本身会超时。