I am a bit stuck here trying to wait for results from two or more axios promises to process them further. console.log("test"); is being executed before the other method calls have been fully executed. I feel how I setup the recursive parsing isn't correct but not sure what to adjust. Anyone here has an idea? Thank you so much.
Output ---
test
Mon Sep 14 2020 14:04:37 GMT+0100 (Irish Standard Time) - 2020-09-13T00:00:00Z - 2020-09-14T00:00:00Z - 0 - 14897 - 1000
Mon Sep 14 2020 14:04:37 GMT+0100 (Irish Standard Time) - 6 - 3247395
index ---
Promise.all([
vault.collectAuditTrailHistory('document_audit_trail', startDate, endDate),
vault.collectGroupMembers(6)
]).then(result => {
console.log("test");
})
vault class ---
async login() {
return this.axiosInstance
.post('/api/v20.2/auth', 'username=' + this.username + '&password=' + this.password, this.config)
.then(response => {
if (response.data.responseStatus = "SUCCESS") {
this.axiosInstance.defaults.headers.common['Authorization'] = response.data.sessionId;
}
})
.catch(error => console.error(error));
}
async collectAuditTrailHistory(audittrail, startDate, endDate) {
// check valid login
if (this.isLoggedIn()) {
return this.axiosInstance
.get('/api/v20.2/audittrail/'+ audittrail +'?start_date=' + startDate + '&end_date=' + endDate + '&limit=1', this.config)
.then(response => {
this.parseAuditTrailHistoryPage(audittrail, startDate, endDate, 0, response.data.responseDetails.total, 1000);
})
.catch(error => console.error(error));
} else {
return this.login()
.then((response) => {
this.collectAuditTrailHistory(audittrail, startDate, endDate);
});
}
}
async collectGroupMembers(groudId) {
// check valid login
if (this.isLoggedIn()) {
return this.axiosInstance
.get('/api/v20.2/objects/groups/' + groudId, this.config)
.then(response => {
for(let i = 0; i < response.data.groups[0].group.members__v.length; i++){
this.collectUserName(groudId, response.data.groups[0].group.members__v[i]);
}
})
.catch(error => console.error(error));
} else {
return this.login()
.then((response) => {
return this.collectGroupMembers(groudId);
});
}
}
async collectUserName(groudId, userId) {
// check valid login
if (this.isLoggedIn()) {
return this.axiosInstance
.get('/api/v20.2/objects/users/' + userId, this.config)
.then(response => {
console.log(new Date() + " - " + groudId + " - " + userId);
this.groupMembers.push([groudId,response.data.users[0].user.user_name__v]);
})
.catch(error => console.error(error));
} else {
return this.login()
.then((response) => {
return this.collectUserName(groudId, userId);
});
}
}
isLoggedIn() {
if (!this.axiosInstance.defaults.headers.common['Authorization'] || !this.lastTxnDateTime)
return false;
else {
let diff = Math.abs(new Date() - this.lastTxnDateTime);
if (Math.floor((diff/1000)/60) < 15) {
return true;
}
else {
return false;
}
}
}
async parseAuditTrailHistoryPage(audittrail, startDate, endDate, offset, total, limit) {
console.log(new Date() + " - " + startDate + " - " + endDate + " - " + offset + " - " + total + " - " + limit);
return this.axiosInstance
.get('/api/v20.2/audittrail/' + audittrail + '?start_date=' + startDate + '&end_date=' + endDate + '&limit=' + limit + '&offset=' + offset, this.config)
.then(response => {
if ((offset+limit) < total) {
this.auditTrailHistory = this.auditTrailHistory.concat(response.data.data);
this.parseAuditTrailHistoryPage(audittrail, startDate, endDate, (offset+limit+1), total, limit);
}
else {
this.auditTrailHistory = this.auditTrailHistory.concat(response.data.data);
}
})
.catch(error => console.error(error));
}
I think your missing some return
in you then
.
async parseAuditTrailHistoryPage(audittrail, startDate, endDate, offset, total, limit) {
console.log(new Date() + " - " + startDate + " - " + endDate + " - " + offset + " - " + total + " - " + limit);
return this.axiosInstance
.get('/api/v20.2/audittrail/' + audittrail + '?start_date=' + startDate + '&end_date=' + endDate + '&limit=' + limit + '&offset=' + offset, this.config)
.then(response => {
if ((offset+limit) < total) {
this.auditTrailHistory = this.auditTrailHistory.concat(response.data.data);
// return promise (add it to the end of the promise chaine)
return this.parseAuditTrailHistoryPage(audittrail, startDate, endDate, (offset+limit+1), total, limit);
}
else {
this.auditTrailHistory = this.auditTrailHistory.concat(response.data.data);
}
})
.catch(error => console.error(error));
}
Without the fix the parseAuditTrailHistoryPage
will not wait for the internal parseAuditTrailHistoryPage
to resolve. With the fix, each iteration of the recursion will wait for the next one till the last one (when (offset+limit) < total == false)
.
Same issue in collectUserName
, collectAuditTrailHistory
,
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.