1

私はコーヒースクリプトでhubotスクリプトを書いています。このスクリプトは、すべて YQL クエリを実行する 3 つのスレッドを開きます。各スレッドがメッセージをチャット クライアント (私の場合は Slack) に送信すると、クライアントは停止します。今、どうにかしてすべてのスレッドから文字列を収集し、それらを 1 つの send コマンドに結合する必要があります。

slack_message = '*Todays menu*'
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

msg.send slack_message
4

1 に答える 1

1

いつでもカウンターを保持できます。

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. あなたが夜を過ごすなら、私はそれらについて少し読むことをお勧めします. それらがどのように機能するかを理解すれば、物事をより良くすることができます。

于 2015-07-16T15:52:34.443 に答える