mpso
mpso

Reputation: 1149

How can I make CoffeeScript closures aware of non-local variables?

This is a CoffeeScript fragment using express and async. How can I make the final callback function aware of the value of template?

app.get '/', (req, res) -> template = 'main'
async.parallel([
  (callback) ->
    db.collection1.find(
      {},
      (err, data) ->
      if !err && data  
        callback null, data
      else
        callback null, null
    ),
  (callback) ->
    db.collection2.find(
      {},
      (err, data) ->
      if !err && data  
        callback null, data
      else
        callback null, null
    )
], (err, results) ->
  console.log template
)

Upvotes: 1

Views: 134

Answers (1)

Russ
Russ

Reputation: 1951

Put your async block within the app.get callback (below template = 'main'). Like so:

app.get '/', (req, res) -> 
  template = 'main'
  async.parallel([
    (callback) ->
      db.collection1.find(
        {},
        (err, data) ->
        if !err && data  
          callback null, data
        else
          callback null, null
      ),
    (callback) ->
      db.collection2.find(
        {},
        (err, data) ->
        if !err && data  
          callback null, data
        else
          callback null, null
      )
  ], (err, results) ->
    console.log template
  )

Upvotes: 1

Related Questions