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 - 我应该如何组织我的代码?我现在得到的不可靠的主要内容,如果未能解决你的问题,请参考以下文章