2017-08-13 90 views
0

我試着使用Node.js的重組複雜的JSON數組,下面是我的代碼控制檯打印但不響應

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(); 
}); 

當我嘗試輸出由於某種原因,它沒有最終ARR3響應似乎在工作。但是,當我安慰它,它的打印正確。

這是否與promise/async有關。

+0

你可以創建jsfiddle嗎? – Ashvin777

+0

您是否正在進行異步呼叫?我試圖弄清楚爲什麼你使用'async.forEachOf'而不是同步的東西。另外,什麼是特別不工作? – JohnnyHK

+0

你在哪裏打印數組? – marvel308

回答

0

問題與這個和平代碼obj['segment-' + ((k) + 1)]導致的問題,我不知道爲什麼發生。通過將其改爲簡單的退貨聲明,它解決了問題。

工作示例:

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 
    } 
}); 

我沒有使用lodash一些重構,並感謝marvel308用於指明瞭async.forEachOf同步關注。這讓我重新思考整個邏輯。