여러 API 호출에서 얻었지 만 배열을 만들고 무한 재귀에서 잡히는 데 문제가있는 데이터 목록을 컴파일하려고합니다.재귀 적 약속이있는 배열에 추가, 자바 스크립트
jsonToCsv() {
this.exportCSV().then(data => {
console.log('From jsonToCSV', data)
})
}
재귀 함수
exportCSV (uidList = this.checkboxList.slice(), offset = 0) {
// Get query, build request
let request = {
id: 'export',
query: this.currentQuery.query,
sort: this.currentQuery.sort,
limit: 100, // how much data is returned
offset: offset // pagination value
}
return new Promise((resolve, reject) => {
// using Vuex to fetch data, returns an array of objects.
this.$store.dispatch('show/fetchQuery', request).then(data => {
let headerList = this.shownHeaders // an array of column id's & thier 'nice names'
let output = []
let row, uid, header
// match the id's to the Data from the API call
for (uid = 0; uid < uidList.length; uid++) {
for (row = 0; row < data.length; row++) {
if (data[row].uid === uidList[uid]) {
let rowData = {}
uidList.splice(uid, 1) // found this id so remove from list
// take data from query call that we want, make objects, push them to array
for (header = 0; header < headerList.length; header++) {
let niceName = headerList[header].niceName
let id = headerList[header].id
rowData[niceName] = data[row][id]
}
output.push(rowData)
}
}
}
// Basecase
if (uidList.length === 0) {
resolve(output)
return
}
offset += 100 // get next 100 results from query
// run next recursive call
this.exportCSV(uidList, offset).then(newData => {
output.push(newData)
resolve(newData)
})
})
})
내가 쿼리가 더 호출 할 경우 I는, 그러나, 제대로 basecase을 처리하고 믿고 : 재귀 함수를 호출
기능 한 번 이상, 2 레벨의 재귀를 의미하며 최신 재귀 호출 만 리턴 값이 인쇄됩니다. 배열 출력이 덮어 쓰여집니다. 기본 코드가 충족되지 않으면 어떻게 데이터를 처리합니까? 대신 모든 녹화 호출에 새로운 출력 인스턴스를 만드는 모든 녹화 통화에서 공유