【发布时间】:2019-07-29 09:25:15
【问题描述】:
我目前正在尝试从 JSON api 端点接收数据并进一步处理它们。主要目标是将包含所有数据的 json 文件归档为单独的数组,并将其转换为 4 个不同的 CSV 文件。正如您在下面的代码中看到的那样,我成功接收数据,但由于对 api 的依赖调用,我有时会遇到早期调用失败以及更深入调用失败的问题。
我的问题是:有没有办法成功地重构它以捕获失败的调用并重新运行它们,并且有一个想法可以使它更可靠和“更干净”
const axios = require('axios')
const fs = require('fs')
const colors = require('colors')
const url = "json.endpoint.url";
const MANDATOR = 1234567890
const TecDoc = []
async function callApi(url, query) {
let res = await axios.post(url, query);
let { data } = res.data
return data.array
}
const getManufacturer = { "getManufacturers": {"country": "DE", "favourdedList": 0, "lang": "de", "linkingTargetType": "P", "provider": MANDATOR} }
let Manufacturer = callApi(url, getManufacturer)
Manufacturer.then(function(ManufacturerResult) {
for(let i = 0; i < ManufacturerResult.length; i++) {
var getModelSeries = { "getModelSeries": {"country": "DE", "favourdedList": 0, "lang": "de", "linkingTargetType": "P", "manuId": ManufacturerResult[i].manuId, "provider": MANDATOR}}
let Model = callApi(url, getModelSeries)
Model.then(function(ModelResult) {
if(ModelResult !== undefined) {
for(let j = 0; j < ModelResult.length; j++) {
var getVehicleIdsByCarCriteria = { "getVehicleIdsByCriteria": {"carType": "P", "countriesCarSelection": "DE", "lang": "de", "manuId": ManufacturerResult[i].manuId, "modId": ModelResult[j].modelId, "provider": MANDATOR}}
let Car = callApi(url, getVehicleIdsByCarCriteria)
Car.then(function(CarResult) {
for(let k = 0; k < CarResult.length; k++) {
var getVehicleByIds4 = { "getVehicleByIds4": {"articleCountry": "DE", "axles": false, "cabs": false, "carIds": {"array": [CarResult[k].carId]}, "countriesCarSelection": "de", "country": "de", "countryGroupFlag": false, "kbaData": true, "lang": "de", "motorCodes": false, "provider": MANDATOR, "secondaryTypes": false, "wheelBase": false}}
let finalCarData = callApi(url, getVehicleByIds4)
finalCarData.then(function(Result) {
//console.log(Result[0].vehicleDetails.manuName)
TecDoc.push(Result)
fs.writeFile('data.json', JSON.stringify(TecDoc), 'utf-8', function() {
console.log("Writing: " + Result[0].vehicleDetails.manuName + " - " + Result[0].vehicleDetails.modelName + " ( " + Result[0].vehicleDetails.typeName + " ) ")
})
}).catch(function(error) {
console.log("FinalCar: ".bold + `${error}`.bgBlue)
})
}
}).catch(function(error) {
console.log("CarType: ".bold + `${error}`.bgYellow.black)
})
}
}
}).catch(function(error) {
console.error("ModelSeries: ".bold + `${error}`.bgMagenta)
})
}
}).catch(function(error) {
console.error("Manufacturer: ".bold + `${error}`.bgRed)
})
//CSV.writeRecords(TecDoc).then(() => console.log('✔ ' + 'The Manufacturer CSV file was successfully written'))
【问题讨论】:
标签: node.js json api refactoring axios