繁体   English   中英

Promise.all 与 axios / node.js

[英]Promise.all with axios / node.js

我在这里试图等待来自两个或多个 axios 承诺的结果以进一步处理它们,这有点卡住了。 控制台日志(“测试”); 在其他方法调用完全执行之前正在执行。 我觉得我如何设置递归解析不正确但不确定要调整什么。 这里有人有想法吗? 非常感谢。

输出 - -

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

指数 - -

Promise.all([
  vault.collectAuditTrailHistory('document_audit_trail', startDate, endDate),
  vault.collectGroupMembers(6)
]).then(result => {
  console.log("test");
})

金库类---

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

我想你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));
    }

如果没有修复, parseAuditTrailHistoryPage将不会等待内部parseAuditTrailHistoryPage解析。 通过修复,递归的每次迭代都会等待下一次直到最后一次(when (offset+limit) < total == false)

collectUserNamecollectAuditTrailHistory相同问题,

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM