[英]Promise.all with axios / node.js
I am a bit stuck here trying to wait for results from two or more axios promises to process them further.我在这里试图等待来自两个或多个 axios 承诺的结果以进一步处理它们,这有点卡住了。 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
.我想你
then
缺少一些return
。
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.如果没有修复,
parseAuditTrailHistoryPage
将不会等待内部parseAuditTrailHistoryPage
解析。 With the fix, each iteration of the recursion will wait for the next one till the last one (when (offset+limit) < total == false)
.通过修复,递归的每次迭代都会等待下一次直到最后一次(when
(offset+limit) < total == false)
。
Same issue in collectUserName
, collectAuditTrailHistory
, collectUserName
, collectAuditTrailHistory
相同问题,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.