这里有点奇怪的事情,想知道是否有人可以告诉我我忽略了什么。 我的应用程序设置与节点一起使用nightmare.js从我的自定义函数生成的随机时间内从网站上抓取数据。
问题是console.log()
会在setTimeout
内被调用,但console.log
只会在我的结果回调中被调用一次,而不会在每个随机区间内被调用?
这是我在终端中输出的输出:
Server started PORT:3000
SHOULD HAVE SCRAPED?
scraped successfully!Tue May 29 2018 21:15:26 GMT-0700 (PDT)
SHOULD HAVE SCRAPED?
SHOULD HAVE SCRAPED?
SHOULD HAVE SCRAPED?
这是我的剧本:
function randomIntFromInterval(min,max) {
return Math.floor(Math.random()*(max-min+1)+min);
}
// Call the scrape function to get new data at a random time between two bounds
function scrapeAtRandomInterval(min, max) {
var rand = randomIntFromInterval(min, max);
setTimeout(function() {
scrape();
console.log('SHOULD HAVE SCRAPED?');
scrapeAtRandomInterval(min, max);
}, rand);
}
scrapeAtRandomInterval(1000, 10000);
function scrape() {
nightmare.goto('SOME WEBSITE')
.wait(2000)
// wait 2 seconds so page is guaranteed to be fully loaded
.evaluate(function() {
var data = [];
... gather data from DOM ...
return data
})
.end()
.then(function(result) {
console.log('scraped successfully!' + new Date());
})
}
我知道我得到了正确的数据,但应该在每个时间间隔内抓取新内容。我认为这个问题可能与梦魇.wait
方法有关吗?