несколько вызовов из цикла for в массив, затем отбрасывание результатов 0 длины - PullRequest
0 голосов
/ 08 мая 2018

Это то, что я пытаюсь достичь, я делаю один вызов API, который приводит к нескольким вызовам на основе почтового индекса и радиуса. На основании результатов плотности населения может быть только один результат или целых двадцать. Результаты этого вызова возвращаются как массивы без информации для нескольких записей. То, что мне нужно сделать, это взять несколько отдельных массивов и создать один массив, который удаляет все пустые массивы и добавляет каждый отдельный массив в один. код, который в настоящее время делает несколько вызовов:

const https = require('https');
const fetch = require('node-fetch');
var zipcodes = require('zipcodes');

var food_truck_zip = '29615'

var userzip = food_truck_zip

var user = zipcodes.lookup(userzip);
//console.log(user);

var rad = zipcodes.radius(userzip,4);

array = rad;
for (var i=0; i<array.length; i++)
    var zipsArray = array;
    for(let i=0;i<zipsArray.length; i++) {
      fetch('https://36245d69.ngrok.io/api/vendor_filter/?zipCode=' + 
      zipsArray[i])
        .then(response => {
         return response.json();
        })
        .then(function handleData(data) {
          var buildOutput = [];
          buildOutput.push(data);
          console.log(JSON.stringify(buildOutput));
        })
        .catch(function handleError(error) {

        });
   };

и результаты console.logs для buildOutput выглядят так:

[[]]
[[]]
[[]]
[[{"truckName":"Chuck Truck","locationName":"Butler Springs 
Estate","locationAddress":"Butler Springs Road","beginning":"10:00 
am","ending":"05:00 pm"},{"truckName":"Henry's Hog 
Hauler","locationName":"Strange Brew","locationAddress":"1100 Wade 
Hampton","beginning":"06:30 pm","ending":"08:30 pm"}, 
{"truckName":"Chuck Coffee Crusted Salmon","locationName":"The Home 
Base","locationAddress":"Butler Springs Estates","beginning":"04:30 
pm","ending":"06:00 pm"}]]
[[]]
[[{"truckName":"ThoroughFARE","locationName":"Grateful 
Brew","locationAddress":"800 North Pleasantburg","beginning":"04:30 
pm","ending":"07;00 pm"}]]
[[]]

Таким образом, результаты для этого почтового индекса с радиусом 4 мили составляют семь почтовых индексов, из которых 2 в настоящее время имеют записи. Помощь в этом будет очень полезна, если поместить семь отдельных вызовов в один массив и удалить все нулевые записи.

1 Ответ

0 голосов
/ 08 мая 2018

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

function Fail(reason){this.reason=reason;};
const isFail = o => (o&&o.constructor)===Fail;
const isNotFail = o => !isFail(o);

Promise.all(
  rad.map(
    zip =>
      fetch('https://36245d69.ngrok.io/api/vendor_filter/?zipCode=' +
      zip)
      .then(response => {
        return response.json();
      })
      .then(function handleData(data) {
        console.log("got data:",JSON.stringify(data));
        return data.map(
          //add zip to item, your question does not show zip but comment askes
          // for zip to be there
          item=>({...item,zip})
        );
      })
      .catch(function handleError(error) {
        err=>new fail([err,zip])
      })
  )
).then(
  results => {
    console.log(
      "successes:",
      results
        .filter(isNotFail)
        .filter(item=>!!item.length)//remove empty items
        .reduce((result,item)=>result.concat(item))//flatten array of array to one array
    );
    results.filter(isFail).forEach(
      ([error,zip])=>console.log("failed:",zip,"with error:",error)
    )
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...