2017-08-13 1 views
0

Im Versuch, einen komplexen JSON Array mit node.js zu restrukturieren, unten ist mein CodeConsole druckt aber nicht Antwort

let n = JSON.parse(JSON.stringify(arr2)); 
async.forEachOf(n, function(value, key, cb1) { 
let obj = []; 
async.forEachOf(value.flightDetail.flightDetails, function(v, k, cb2) { 
    let dateTimeInfo = v.flightInformation.productDateTime; 
    let isNextDay = ((dateTimeInfo.dateVariation) ? true : false); 
    let sectorInf = v.flightInformation.location; 
    let flightDetails = {}; 
    flightDetails.eType = v.flightInformation.productDetail.equipmentType; 
    flightDetails.marketingCarrier = v.flightInformation.companyId.marketingCarrier; 
    flightDetails.operatingCarrier = v.flightInformation.companyId.operatingCarrier || v.flightInformation.companyId.marketingCarrier; 
    obj['segment-' + ((k) + 1)] = { 
     departureDate: dateTimeInfo.dateOfDeparture, 
     arrivalDate: dateTimeInfo.dateOfArrival, 
     departureTime: dateTimeInfo.timeOfDeparture, 
     arrivalTime: dateTimeInfo.timeOfArrival, 
     isNextDay: isNextDay, 
     sourceSector: sectorInf[0].locationId, 
     sourceTerminal: sectorInf[0].terminal || "", 
     desitinationSector: sectorInf[1].locationId, 
     desitinationTerminal: sectorInf[1].terminal || "", 
     flightInfo: flightDetails 
    } 
    console.log(JSON.stringify(obj)); **-- This doesn't working** 
    console.log(obj); **-- this does work** 
    cb2(); 
}, function() { 
    arr3.push({ 
     flight: obj, 
     price: value.priceObject 
    }); 
    cb1(); 
    }); 
}, function() { 
callback(); 
}); 

Wenn im auszugeben versuchen, die endgültigen arr3 Antwort aus irgendeinem Grunde nicht funktioniert scheint zu arbeiten. Aber wenn ich es trage, wird es richtig gedruckt.

Ist es etwas mit Versprechen/Async zu tun.

+0

Können Sie jsfiddle erstellen? – Ashvin777

+0

Machst du irgendwelche asynchronen Anrufe? Ich versuche herauszufinden, warum Sie 'async.forEachOf' statt etwas Synchrones verwenden. Auch, was speziell nicht funktioniert? – JohnnyHK

+0

Wo druckst du das Array? – marvel308

Antwort

0

Das Problem mit diesem Frieden des Codes obj['segment-' + ((k) + 1)], die das Problem verursacht, ich weiß nicht, warum das passiert ist. Durch die Änderung zu einer einfachen Return-Anweisung wurde das Problem gelöst.

funktionstüchtiges Beispiel:

let n = _.map(dataArray, function(flightObjectVal) { 
    let flightObj = flightObjectVal.flightDetail.flightDetails; 
    let pricedObj = flightObjectVal.priceObject; 
    return { 
    flight: _.map(flightObj, function(v) { 
     // Incase of flightInformation key is missing in the response object append with one. 
     if (!v.flightInformation) { 
     v.flightInformation = v; 
     } 

     // Date & Time object 
     let dateTimeInfo = v.flightInformation.productDateTime; 

     // Is the flight next day 
     let isNextDay = ((dateTimeInfo.dateVariation) ? true : false); 

     // Flight sector object 
     let sectorInf = v.flightInformation.location; 

     // Define restructured flight detials object 
     let flightDetails = {}; 

     // Flight Equipment type 
     flightDetails.eType = v.flightInformation.productDetail.equipmentType; 

     // Marketing airline code 
     flightDetails.marketingCarrier = v.flightInformation.companyId.marketingCarrier; 

     // Operating airline code 
     flightDetails.operatingCarrier = v.flightInformation.companyId.operatingCarrier || v.flightInformation.companyId.marketingCarrier; 

     //Return the final restructured object 
     return { 
     departureDate: dateTimeInfo.dateOfDeparture, 
     arrivalDate: dateTimeInfo.dateOfArrival, 
     departureTime: dateTimeInfo.timeOfDeparture, 
     arrivalTime: dateTimeInfo.timeOfArrival, 
     isNextDay: isNextDay, 
     sourceSector: sectorInf[0].locationId, 
     sourceTerminal: sectorInf[0].terminal || "", 
     desitinationSector: sectorInf[1].locationId, 
     desitinationTerminal: sectorInf[1].terminal || "", 
     flightInfo: flightDetails 
     } 
    }), 
    pricedObj: pricedObj 
    } 
}); 

Ich habe einige Refactoring mit lodash und dank marvel308 für den Hinweis auf die async.forEachOf synchrone Sorge. Das hat mich dazu gebracht, die ganze Logik zu überdenken.

Verwandte Themen