简体   繁体   中英

Calling async.waterfall within async.series function not executing async.series callback function

I would like to call use async waterfall function within a async series function. looks like parallel functions are executed but final callback function of async series does not seem to be executed. I get the results of the instances of the function which is called with different arguments in series function but cannot have the line executed for some reason.

➜  lib git:(jumpstart-compare) ✗ node aws-ecs.compare.js
Data 1f701a9754eb22ce8f0dcdb4c1b0b366a51ade9a
Data 4cc27bcc2a8482478ac2e5c0cf3ac1babe153374


var AWS = require('aws-sdk');
const async = require('async')
const _ = require('lodash');
AWS.config.update({
    region: 'us-east-1'
});
const ecs = new AWS.ECS();



getClusterSha = (clustername,app,callback) => {

    const ListServices = (callback) => {
        let params = {
            cluster: clustername
        }
        //console.log('list tasks executed')
        ecs.listServices(params, (err, data) => {
            if (err) {
                callback(err)
            } else {
                let dataObj = {
                    data: data,
                    cluster: clustername
                }
                callback(null,dataObj)
            }

        })
    }

    const getService = (arg1, callback) => {
        let appname = app
        arg1.cluster
        let finaldata = arg1.data.serviceArns.filter((elem)=>{
            if(elem.indexOf(appname) != -1){    
                return elem
            }
        });
        //console.log('finaldata: ',finaldata)
        if(finaldata.length > 0){
            callback(null,finaldata.toString().split('/')[1])
        }else{
            callback('No app with name: '+appname+' found!')
        }
    }


    const describeService = (arg2, callback) => {
        let params = {
            services: [arg2],
            cluster: clustername
        }
        ecs.describeServices(params, (err, data) => {
            if (err) {
                callback(err)
            } else {
            //  console.log(data)
                callback(null,data.services[0].taskDefinition.split('/')[1])
            }
        })
    }


    const describeTaskDef = (arg3, callback) => {
        let params = {
            taskDefinition: arg3
        }
        ecs.describeTaskDefinition(params, (err, data) => {
            if (err) {
                callback(err)
            } else {
                //console.log(data.taskDefinition.containerDefinitions[0].image.split('/')[1].split(':')[1])
                finaldata = data.taskDefinition.containerDefinitions[0]
                                                                             .image.split('/')[1]
                                                                             .split(':')[1]
                callback(null,finaldata)
            }
        })
    }


    // const githubCall = (arg4,callback) => {
    //  console.log('https://github.com/Jumpstart-Auto'+'/'+app+'/commit/'+arg4)
    //  callback(null,'https://github.com/Jumpstart-Auto'+'/'+app+'/commit/'+arg4)  
    // }


    async.waterfall([
        ListServices,
        getService,
        describeService,
        describeTaskDef,
    ], (err, data) => {
        if (err) {
                        console.log('Error', err)
                        callback(err)
        } else {
                        console.log('Data', data)
                        callback(null,data)
        }
    })

}



compareSha = (clustername1,clustername2,app) => {
    async.series([
                getClusterSha(clustername1,app,(data)=>{return data}),                  
                getClusterSha(clustername2,app,(data)=>{return data})                       
        ], (err,result)=>{
            console.log(err,result)
        })
}




compareSha('dev','staging','jamobot',function(err,data){
    console.log(data)
})

//module.exports = getShaCluster

changing async.series to following fixed the problem.

async.waterfall([
        ListServices,
        getService,
        describeService,
        describeTaskDef,
    ], (err, data) => {
        if (err) {
                        console.log('Error', err)
                        callback(err)
        } else {
                        console.log('Data', data)
                        callback(null,data)
        }
    })

}



compareSha = (clustername1,clustername2,app,cb) => {
    async.series([
            function(callback){ 
                getClusterSha(clustername1,app,callback)
          },                    
            function(callback){ 
                getClusterSha(clustername2,app,callback)
          },                    
        ], (err,result)=>{
            if(err){
                cb(err)
            }else{
                cb(null,result)
            }
        })

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.

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