【问题标题】:unexpected callback execution order意外回调执行顺序
【发布时间】:2016-03-05 16:48:33
【问题描述】:

我正在编写一个 hubot 脚本来按区域列出我在 AWS 中的所有 CloudFormation 堆栈。我已经写了以下内容,它可以工作,除了数据输出的顺序。脚本是:

key = process.env.HUBOT_AWS_ACCESS_KEY_ID
secret = process.env.HUBOT_AWS_SECRET_ACCESS_KEY
defaultRegions = 'us-east-1,us-west-2,eu-west-1'

_ = require 'underscore'
moment = require 'moment'
AWS = require 'aws-sdk'

getRegionStacks = (region, logger, msg) ->
    msg.send "In region #{region}:"
    AWS.config.region = region
    cloudFormation = new AWS.CloudFormation()
    params = {
        StackStatusFilter: [ 'CREATE_COMPLETE' ]
    }
    cloudFormation.listStacks params, (err, data) ->
        if err
            logger.error "Received error #{JSON.stringify err}"
            logger.error err.stack
        else
            for stack in data.StackSummaries
                    msg.send stack.StackName

module.exports = (robot) ->
    robot.hear /List running Cloudformation stacks/i, (msg)->
        msg.send "The following CloudFormation stacks are running:"
        getRegionStacks region, robot.logger, msg for region in defaultRegions.split ','

我希望输出看起来像:

The following CloudFormation stacks are running:
    In region us-east-1:
    demo-container1
    In region us-west-2:
    demo-container2
    In region eu-west-1:
    demo-container3

但是,在函数完成后,回调似乎都被触发了,返回的输出是这样的:

The following CloudFormation stacks are running:
    In region us-east-1:
    In region us-west-2:
    In region eu-west-1:
    demo-container1
    demo-container2
    demo-container3

我确定我忽略了一些简单的事情。有谁知道我做错了什么?

【问题讨论】:

    标签: node.js coffeescript hubot


    【解决方案1】:

    看起来您正在同步打印区域,而 liststacks 函数是异步的。以下内容未经测试,但可能有效:

    getRegionStacks = (region, logger, msg) ->
        AWS.config.region = region
        cloudFormation = new AWS.CloudFormation()
        params = {
            StackStatusFilter: [ 'CREATE_COMPLETE' ]
        }
        cloudFormation.listStacks params, (err, data) ->
            if err
                logger.error "Received error #{JSON.stringify err}"
                logger.error err.stack
            else
                msg.send "In region #{region}:"
                for stack in data.StackSummaries
                    msg.send stack.StackName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-27
      • 2019-03-26
      • 2023-03-27
      相关资源
      最近更新 更多