-1

我正在使用 X 射线,这很棒,但缺乏教程。无论如何,我使用一个名为 urls 的 url 数组。在循环中,每个 url 通过回调获取并返回结果。在回调函数中,我需要知道解析的 url 是什么。如果回调只返回 err 和结果,我怎么知道返回的是哪个 url?(这真的是一个 X 射线问题还是 js)

 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 img@src',
      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'));
});

} }

4

2 回答 2

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
  }
};
于 2016-05-17T09:17:20.823 回答
1

请参阅使用 JS 闭包获取 url 的示例。请注意数组中的 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)}`);
  });
});

ps 旁注,在处理返回的错误时,你可以看看我刚刚在这里写的错误处理指南

于 2016-05-17T09:23:31.873 回答