Вы всегда можете вести счетчик:
slack_message = '*Todays menu*'
queries_done = 0
for i in [1..3]
query = "select * from html where url='XPATH.. ["+i+"] XPATH.."
new YQL.exec query, (response) ->
m = response.query.results
slack_message += m
if queries_done is 3
msg.send slack_message
Вы также можете использовать обещания:
Promise = require("promise")
call_query = (query) ->
new Promise (resolve) ->
new YQL.exec query, (response) ->
resolve response.query.results;
get_menu = ->
slack_message = '*Todays menu*'
queries = []
for i in [1..3]
queries.push (call_query "select * from html where url='XPATH.. ["+i+"] XPATH..")
Promise.all(queries).then (messages) ->
msg.send slack_message + messages.join()
Промисы — это альтернатива обратным вызовам для асинхронной логики, и вы можете делать с ними отличные вещи, такие как Promise.all
, это как раз то, что вы ищете. Он принимает массив из Promise
объектов, и когда все они разрешены, он продолжает выполнять .then
. Если у вас есть вечер, я предлагаю прочитать немного о них. Они могут сделать вещи лучше, как только вы поймете, как они работают.
person
Kevin Chavez
schedule
16.07.2015