2017-04-10 29 views
0

我遇到了一些問題,其中一些代碼以延遲或隨機順序寫入控制檯,哪裏出錯?node.js - 我應該如何組織我的代碼?我現在得到的是不可靠的

var request = require('request'); 
var vFind = 'HelloWorld'; 
var vFound = false; 
var vSites = ['http://www.youtube.com','http://www.gmail.com','http://www.apple.com','http://www.live.com','http://www.msn.com','http://www.yahoo.com','http://www.bing.com','http://www.purple.com','http://www.abc.xyz','http://www.reddit.com','http://www.stackoverflow.com','http://www.newgrounds.com','http://www.twitter.com','http://www.flickr.com','http://www.paypal.com','http://www.mediafire.com','http://www.mega.co.nz','http://www.soundcloud.com','http://www.slack.com','http://www.discordapp.com','http://www.trello.com','http://www.ninite.com','http://www.imgur.com','http://www.interacts.js','http://www.drive.google.com']; 

    for (j = 0; j < (vSites.length); j++){ 
    request(vSites[j], function (error, response, vBody) { 
     for (i = 0; i < (vBody.length); i++){ 
     if (vBody.substr(i,vFind.length) == vFind && vFound == false){ 
      vFound = true; 
      break; 
     } 
     } 
     if (vFound == false) 
     console.log(vSites[j]+" didn't have it..."); 
     else if (vFound == true){ 
     console.log(vSites[j]+" has it!"); 
     vFound = false; 
     } 
    }); 
    } 
+0

'random order' - 因爲異步代碼是異步的,您無法確定每個請求將花費多長時間 –

+2

Javascript是異步的 - 不,它不是 –

回答

1

這裏是你做了什麼的僞代碼:

對於vSites每個網站,使一個HTTP請求。一旦請求完成後,運行該功能:

function (error, response, vBody) { 
    for (i = 0; i < (vBody.length); i++){ 
    if (vBody.substr(i,vFind.length) == vFind && vFound == false){ 
     vFound = true; 
     break; 
    } 
    } 
    if (vFound == false) 
    console.log(vSites[j]+" didn't have it..."); 
    else if (vFound == true){ 
    console.log(vSites[j]+" has it!"); 
    vFound = false; 
    } 
} 

什麼情況是:所有的請求是由然後當響應到達客戶端,上面的函數被調用。 Google可能會比YouTube更快地回覆回覆,等等......如果您想要保持這些順序,您應該查看Promises。

+0

如果請求的網站數量發生變化,該怎麼辦?有時甚至有25次是11次。 – TheBloodSeeker005

相關問題