node.js - 我应该如何组织我的代码?我现在得到的不可靠

Posted

技术标签:

【中文标题】node.js - 我应该如何组织我的代码?我现在得到的不可靠【英文标题】:node.js - How should I organize my code? What I got now isn't reliable 【发布时间】:2017-09-04 22:20:40 【问题描述】:

我遇到一个问题,即某些代码延迟写入控制台或以随机顺序写入控制台,我哪里出错了?

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.***.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;
      
    );
  

【问题讨论】:

random order - 因为异步代码是异步的,您无法确定每个请求需要多长时间 javascript is asynchronous - 不,不是 【参考方案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。

【讨论】:

如果请求的网站数量发生变化怎么办?有时是 11 次,有时是 25 次。

以上是关于node.js - 我应该如何组织我的代码?我现在得到的不可靠的主要内容,如果未能解决你的问题,请参考以下文章

如何使带有房间的 node.js 服务器可扩展

MEAN 项目 - 组织

如何让我的 Node.js MySQL 连接作为承诺工作?

Node.js:如何将全局变量传递到通过 require() 插入的文件中?

我应该 node.js 监听哪些端口?如何以及为啥?

为啥我在 Node.js 上有 NaN?