当循环退出时,节点httpscallback不会触发

我的问题可能是直截了当的,但我无法弄清幕后发生的事情。 我正在循环访问数据库表中的一系列域,向他们呼叫,获取SSL证书并将其存储在数据库中。

大多数情况下,它正在工作 – 除非循环退出任何没有完成的调用就停止。

数据库检索开始检查:

function queryRows() { complete = false; var query = c.query("SELECT * FROM domains LIMIT 100 OFFSET " + offset); query.on('result', function(res) { res.on('data', function(row) { checkUrl(row) }).on('end', function() { complete = true; }); }).on('end', function() { console.log(complete); offset += 100; if(offset <= (parseInt(rows) + 400)){ queryRows(); } else { console.log("Done, waiting"); setTimeoutPromise(600000, 'foobar').then((value) => { console.log("restarting") offset = 0; getTotal(); }); } }); } 

和检查SSL的代码:

 function checkSSL(id, domain){ complete = false var options = { host: domain, rejectUnauthorized: false }; callback = function(response) { var str = ''; try { if(domain == "arstechnica.com"){ console.log("Found ars - savingCertificate"); } cert = response.connection.getPeerCertificate(true); complete = hasSSL(cert, domain, id); // updateDomainRecord(cert, domain, id) } catch (error){ console.log(error); complete = true; noSSLRecord(domain, id); } } const req = https.request(options, callback); req.on('error', (e) => { // console.error(e); }); } 

值得注意的是,如果我在https.request之前放置一个console.log,我可以在我的控制台中看到它。 然而,callback中的任何日志都无法触发(因为callback本身从不触发)。

再一次,callback的一些时间。 它只是在数据库循环结束时才会停止工作。 任何意见,将不胜感激!

看起来你的请求永远不会被发送,所以callback将永远不会被解雇。 确保您的请求实际上正在发送,所以您最后必须添加一行:

 req.end();