您始终可以保留一个计数器:
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
你也可以使用Promises:
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 是异步逻辑回调的替代方案,你可以用它们做一些漂亮的事情,比如Promise.all
,这正是你想要的。它接受一个对象数组,Promise
当它们都被解析后,它会继续执行.then
. 如果您有一个晚上,我建议您阅读一些有关它们的信息。一旦您掌握了它们的工作原理,它们就可以使事情变得更好。