Несколько URL в запросе get с ax ios .all, как мне сопоставить response.data с соответствующим объектом url? - PullRequest
0 голосов
/ 05 апреля 2020

Я создаю инструмент для работы. В основном я загружаю CSV для извлечения деталей, которые будут действовать как параметры в запросе ax ios.

Я использую несколько адресов в ax ios .all, и моя проблема в том, что я не могу сопоставить ответьте данные для каждого объекта с указанным c URL. Подробности ниже с фрагментами кода. Надеюсь, я объяснил это достаточно подробно ниже, но это связано с массовым запросом множества URL-адресов одновременно и получением данных ответа. Проблема заключается в сопоставлении этих данных ответа с их правильным URL-адресом, из которого они были вызваны.

Здесь мы go ... для начала я сопоставляю массив данных транспортного средства, которые я загружаю с внешнего CSV-файл. 'resultsArray' - это мой массив, в котором хранятся год, марка, модель, комплектация, цена, URL-адрес для размещения исходного сообщения и местоположение транспортного средства.

    let vehicle_specs = resultsArray.map(function(d, index) {
    let values = {
      year: d['Title_name'].split(' ')[0], // Iterate with bracket notation
      make: d['Title_name'].split(' ')[1],
      model: d['Title_name'].split(' ')[2],
      trim: d['Title_name'].split(' ')[3],
      price: d['Title_Price'],
      cl_url: d['Title_Price_url'],
      cl_location: d['Title_Location'],
    }
    return values;
  });

Я использую новое ключевое слово для создания объект транспортного средства.

      let Vehicle = function(year, make, model, trim, price, url, cl_url, cl_location) {
    this.year = year;
    this.make = make;
    this.model = model;
    this.trim = trim;
    this.price = price;
    this.url = url;
    this.cl_url = cl_url;
    this.cl_location = cl_location;
  }

Затем я строю объект с новым экземпляром Vehicle и возвращаю каждое транспортное средство, как мне нужно.

       let  vehicle_data = vehicle_specs.map(function(s) {
       let url = `http://api.marketcheck.com/v2/stats/car?api_key={}&ymm=${s.year}|${s.make}|${s.model}`;
       let new_vehicle = new Vehicle(`${s.year}`, `${s.make}`, `${s.model}`, `${s.trim}`, `${s.price}`, `${url}`, `${s.cl_url}`, `${s.cl_location}`);
       return new_vehicle;
  });

Я извлекаю URL-адреса в следующем фрагменте кода и использую ax ios .all для запроса данных у каждого.

      let urls = vehicle_data.map(function(m) {
    return m.url;
  })

  let options = {
    'method': 'GET',
    'headers': {
      'Host': 'marketcheck-prod.apigee.net'
    }
  };

  axios.all(urls.map(url => {
    request(url, options, function (error, response, body) { 
      if(error) {
        console.log(error);
      } else {
        console.log(response);
      }
    });
  }))

Моя проблема:

Я использую сторонний API (Marcketcheck) - хранит данные о транспортных средствах.

Возвращаются данные ответа (см. Пример в качестве примера ниже. Это данные только для 1 URL)

{"price_stats":{"geometric_mean":3413,"min":899,"median":3595,"population_standard_deviation":1323,"variance":1750285,"ax":7995,"mean":3655,"trimmed_mean":3572,"standard_deviation":1323,"iqr":1800},"miles_stats":{"geometric_mean":97901,"min":2,"median":125000,"population_standard_deviation":51713,"variance":2147483647,"max":230456,"mean":125182,"trimmed_mean":125879,"standard_deviation":51713,"iqr":74734},"dom_stats":{"geometric_mean":100,"min":1,"median":100,"population_standard_deviation":399,"variance":159152,"max":2513,"mean":247,"trimmed_mean":162,"standard_deviation":399,"iqr":217},"count":101}

Я не могу понять, как сопоставить данные каждого ответа с объектом транспортного средства с указанным c url.

Например, если я запрашиваю 3 URL-адреса с объекта транспортного средства. Давайте назовем их:

  1. Url-1
  2. Url-2
  3. Url-3

Я получаю данные моего ответа как объекты:

  1. OBJ-1
  2. OBJ-2
  3. OBJ-3

У меня нет возможности, насколько я знаю с моим уровнем знаний, как назначить каждому объекту его заданный c URL и ТО, сопоставить эти данные OBJ с его указанным c транспортным средством.

Я не бился головой о стену в течение приблизительно 4 дней я не могу понять это.

Любые предложения приветствуются, и я действительно ценю любого, кто просматривает это сообщение, чтобы помочь.

1 Ответ

0 голосов
/ 06 апреля 2020

Проверьте это

    let requests = urls.map((url) => {
      return axios.get(url, {
        headers: {
          'Host': 'marketcheck-prod.apigee.net'
        }
      });
    });   

    Promise.all(requests).then((responces) => {
       console.log(responces);
    }).catch((err) => {
       console.log(err)
    });
...