2017-07-03 14 views
6

मेरी समस्या शायद सीधे आगे है, लेकिन मैं यह नहीं समझ सकता कि दृश्यों के पीछे क्या हो रहा है। मैं डेटाबेस तालिका में डोमेन की एक श्रृंखला के माध्यम से लूपिंग कर रहा हूं, उन्हें बुला रहा हूं, एसएसएल प्रमाण पत्र को पकड़ रहा हूं और डेटाबेस में इसके बारे में जानकारी संग्रहीत कर रहा हूं।लूप बाहर निकलने पर नोड https कॉलबैक फायरिंग नहीं

अधिकांश भाग के लिए, यह काम कर रहा है - सिवाय जब लूप किसी भी कॉल से बाहर निकलता है जो पूरा नहीं हुआ है तो बस मृत बंद करो।

डेटाबेस पुनर्प्राप्ति कि शुरू होता है जांच:

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 शब्दों में कहें, मैं देख रहा हूँ लायक है यह मेरे कंसोल में है। हालांकि कॉलबैक के भीतर कोई भी लॉग ट्रिगर करने में विफल रहता है (क्योंकि कॉलबैक स्वयं कभी नहीं आग लगती है)।

फिर से, कुछ समय कॉलबैक करता है। यह केवल डेटाबेस लूप के अंत के पास है जहां यह काम करना बंद कर देता है। किसी भी सलाह की सराहना की जाएगी!

+1

यदि आप 'console.log (प्रतिक्रिया)' के बाद 'कॉलबैक = समारोह (प्रतिक्रिया) सही जोड़ने {' यह लॉग कुछ कुछ? – gnuns

+7

आपको यकीन है कि कॉलबैक कभी-कभी आग लगती है? आप 'req.end()' को कॉल नहीं कर रहे हैं, जो तब होता है जब आपका अनुरोध वास्तव में भेजा जाता है। आपका अनुरोध हमेशा आपके लिए शरीर लिखने का इंतजार कर रहा है। –

+1

डेटा फ़ंक्शन लाने में हमारे पास 2 अंत ईवेंट क्यों हैं? –

उत्तर

5

ऐसा लगता है कि आपका अनुरोध कभी नहीं भेजा जा रहा है, इसलिए callback कभी नहीं निकाल दिया जाएगा। सुनिश्चित करें कि आपके अनुरोध वास्तव में भेजा जा रहा है, ताकि आप अंत में एक लाइन जोड़ने के लिए:

req.end(); 
संबंधित मुद्दे