我正在使用node.js项目(使用Wikistream作为基础,因此不完全是我自己的代码),它会对实时维基百科进行编辑。代码将每个编辑分解为其组成部分并将其存储为对象(请参阅https://gist.github.com/2770152处的要点)。其中一个部分是URL。我想知道在解析每个编辑时是否有可能刮取每个编辑的URL,显示预编辑和后编辑的维基百科页面之间的差异,抓住差异(在一个名为'diffchange diffchange-inline'的span类中) ,例如)并将其添加为对象的另一个属性。不是它可能只是一个字符串,不必完全结构化。
我尝试过使用nodeio并拥有一些像这样的代码(我特意尝试仅删除评论中标记的编辑(m [6])作为可能的破坏行为):
if (m[6].match(/vandal/) && namespace === "article"){
nodeio.scrape(function(){
this.getHtml(m[3], function(err, $){
//console.log('getting HTML, boss.');
console.log(err);
var output = [];
$('span.diffchange.diffchange-inline').each(function(scraped){
output.push(scraped.text);
});
vandalContent = output.toString();
});
});
} else {
vandalContent = "no content";
}
当它命中条件语句时,它会刮一次,然后程序关闭。它不会将所需内容存储为对象的属性。如果不满足条件,则会将vandalContent属性设置为“no content”。
我想知道的是:是否有可能在飞行中像这样刮?刮掉程序的刮痧是什么?是否有其他建议的方法来获得类似的结果?
答案 0 :(得分:0)
我还没有使用过nodeio,但是签名看起来是异步回调,所以从程序流的角度来看,这种情况发生在后台,因此不会阻止下一个语句发生(下一个语句是外面的任何语句)你的if块)。
看起来你正在尝试按顺序执行它,这意味着你需要重新考虑你想要你的回调做什么,或者通过将整个事物放在while循环中来强制它是顺序的,只有当你退出时有破坏性的内容(我不推荐)。
对于测试,尝试在回调中的vandalContent上执行console.log并查看它吐出的内容。