Taranacak web siteleri listesini getiren düğüm kodum var ve sonuçta yinelenen, fantom kullanılarak yazılmış bir tarama işlevini çağırıyor. Ancak tarama fonksiyonu sonucu döndürmeden önce, döngü tekrarlama sayısını artırır ve dolayısıyla tarama işlevine çağrı yapamayan çağrı sayısıdır. Sorunum için hemen yanıt vermem gerekiyor. Lütfen birisi beni bu kuyudan çıkar.node.js işlev çağrısı yinelemeden önce işlev çağrısı yineleme yinelenen nesne sorunu yaratılıyor
benim ana sayfa kodu
db.fetch_serviceEntity(function(serviceEntityData){
if(serviceEntityData!=""){
serviceEntityData.forEach(function(item){
console.log(item.website_url);
db.fetch_entityId(item.id,function(entityId){
crawler.getCount(item.website_url, item.name, function(rCount){
console.log("number of fresh reviews to crawl : ", parseInt(rCount) - parseInt(item.review_count));
if(rCount > item.review_count){
fetchReviews(item.website_url, entityId.id, parseInt(rCount) - parseInt(item.review_count), function(){
db.updateReviewCount(item.id, rCount, function(){
process.exit(0);
});
});
}
});
});
};
});
}
else {
console.log("No websites to crawl/database error");
}
process.exit(0);
});
benim tarama fonksiyonu burada
crawler.prototype.crawl = function(webUrl, callback){
console.log(webUrl);
this.driver.create({ path: require('phantomjs').path }, function (err, browser) {
return browser.createPage(function (err,page) {
return page.open(webUrl, function (err,status) {
console.log("opened site? ", status);
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js', function (err) {
// Wait for a bit for AJAX content to load on the page. Here, we are waiting 5 seconds.
setTimeout(function() {
return page.evaluate(function() {
//Get what you want from the page using jQuery.
var reviews = [];
$('li div.review').each(function() {
if($(this).find('div.ypassport').text()){
var d = new Date($(this).find('span.rating-qualifier').text().trim());
var temp = {
id : $(this).attr('data-review-id'),
entity_id : "",
user_id : $(this).attr('data-signup-object').split(":")[1],
}
reviews.push(temp);
}
});
return {
reviews: reviews
};
}, function (err,result) {
browser.exit();
callback(result);
});
}, 5000);
});
});
});
});
}; Bunu yazılı tarama fonksiyonu için düğüm-fantom-basit kullanıyorum
burada benim problem olduğunu - döngü için kendisine çağrı sayısını yaptığından>, tarama fonksiyonu bana hata veren bir kısmını veya başka bir nesnenin o oluşturulmadı. Örneğin kodda "createpage undefined işlevi değil" ifadesiyle, bu nedenle tarayıcı nesnesi oluşturulmamıştır. bazen "açık, tanımlanmamış bir işlev değil", dolayısıyla "sayfa" nesnesinin oluşturulmadığını belirtir.
(Bunun, kodu. Bir geri arama cehennem. Belki daha küçük işlevler oluşturmak istiyorum, sonra
async
veyaco
hatta elle gibi bir kütüphane ile zincirleyin), ama okumak için kod ... Ayrı işlevleri veya harici kütüphaneleri kullanmayı deneyin, hatta ES6'ya gidip vaatleri kullanın. – DrakoumelEvet, vaatlerle çalışıyorum .. teşekkürler. – Mallikarjun
yazıyorsa, söz veriyorum. Q veya Bluebird kütüphaneleri sağlam. Sahip olduğunuz bu tür yuvalama genellikle Doom Piramidi olarak anılır: https://en.wikipedia.org/wiki/Pyramid_of_doom_(programming) –