2017-09-26 79 views
1

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

+0

是如何“第三方API”融入节点环境?一个HTTP请求肯定会超时。 – Bergi

+0

API的文档应该说明什么是“适当的回调”。是的,它会等待,如果这是它应该如何使用。 – Bergi

回答

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函数本身会超时。

3

I假设您正在使用express如果您使用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; 
+0

我不明白“某些第三方API”有哪些表达方式? – Bergi

+0

根据问题Nodejs用于调用第三方API,因此,我们必须处理nodejs端的等待时间以消除超时事件。 –

+0

“呼叫第三方API”可以表示任何内容。不,我们不能假设OP使用“request”作为任何事情 – Bergi