2017-08-23 13 views
0

非同期シリーズ関数内でasync waterfall関数を使用したいと思います。並列関数が実行されるように見えますが、非同期シリーズの最終的なコールバック関数は実行されていないようです。私は、関数のインスタンスの結果を取得します。関数のインスタンスは、直列関数では異なる引数で呼び出されますが、何らかの理由で行が実行されないようにすることはできません。async.series関数内でasync.waterfallを呼び出すと、async.seriesコールバック関数が実行されません。

➜ 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 
+0

「async.series」が間違っています。 '(data)=> {return data}'は非同期コールバックとしては意味がありません。 – Bergi

答えて

0

は、問題を修正し、次のようasync.seriesを変更します。

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) 
      } 
     }) 
関連する問題