2016-05-16 6 views
-1

im с использованием рентгеновского снимка, что является большим, но отсутствие учебника. во всяком случае, я использую массив URL-адресов с URL-адресами. В цикле каждый URL-адрес получает и возвращает результат через обратный вызов. в функции обратного вызова мне нужно знать, что такое URL-адрес, который был разобран. Как я могу узнать, какой URL-адрес возвращается, если обратный вызов возвращает только ошибку и результаты? (Это действительно вопрос к рентгеновским или JS)NodeJS рентгеновский веб-скребок: множественные URL-адреса в обратном вызове цикла

xrayRamiLevy = function(){ 
    var index = 0; 
    for (index; index < urls.length; index++){ 
    x(urls[index].url, '.product_item', 
    [{ 
     title : '.prodDescDiv h3', 
     description : '.prodBrand', 
     imageUrl : '.image_icons_zone .image [email protected]', 
     onclick : '.image_icons_zone .image a @onclick', 
    }] 
) 
(function(err, results){ 
    for (var i = 0; i < results.length; i++){ 

     var s = results[i].onclick.substr(0, results[i].onclick.lastIndexOf("'")); 
     s = s.slice(s.lastIndexOf("'") + 1); 
     results[i].catalogueNumber = s; 
     delete results[i].onclick; 
     if (results[i].description !== undefined && results[i].description.length > 0) 
     s = results[i].description.replace(/\s+/g, ' ').trim(); 
     results[i].description = s; 

     if (urls[index].category !== undefined && urls[index].category.length > 0) 
     results[i].categoriesIds = urls[index].category; 

     if (urls[index].subcategory !== undefined && urls[index].subcategory.length > 0) 
     results[i].subcategoriesIds = urls[index].subcategory; 

    } 
    fs.writeFile("./results.json", JSON.stringify(results, null, '\t')); 
}); 

}}

ответ

1

Я не в полной мере получить ваш пример, однако:

urls.forEach(function(url, index){ 
    //whatever you need to do to prep your call to x 
var callback = x(url, '.product_item', ...); 
callback(wrappedCallback(url)); 
} 

function wrappedCallback(url) { 
    return function(err, results){ 
    // url is defined here 
    } 
}; 
1

См пример получения URL используя закрытие JS. Обратите внимание, как URL-адрес из массива доступен в обратном вызове fn.

var Xray = require('x-ray'); 
var util = require('util'); 
var x = Xray(); 

var sitesToHandle = ['https://dribbble.com?x=1', 'https://dribbble.com?x=2']; 
sitesToHandle.forEach((urlToHandle) => { 
    x(urlToHandle, 'li.group', [{ 
    title: '.dribbble-img strong', 
    image: '.dribbble-img [data-src]@data-src', 
    }]).(function (err, results) { 
    console.log(`let's now handle the result of ${urlToHandle}, the results are ${util.inspect(results)}`); 
    }); 
}); 

p.s. обратите внимание, что при обработке возвращенных ошибок вы можете взглянуть на руководство по обработке ошибок, которое I just wrote here

+0

спасибо @Yonatan, должен ли я использовать знак $? откуда пришел util.inspect? – dang

+0

Нет, он предназначен только для включения переменной внутри строки. Также util.inspect используется для печати объектов в журнале, это не обязательно – Yonatan