3

以下のスレッド関連のコードをコメントアウトすると、slack API への送信が期待どおりに機能します。ただし、スレッド コマンド内で送信を処理しようとすると、送信が完了しません。

私は何か間違ったことをしていますか?Railo 4 での実行

// push to slack!
public function push(options = {}) {

    var http = new http();
    var data = {
        "text": "Default message",
        "channel": "activity"
    };

    structAppend(data, options);

    // thread
    //  action="run" {

        sleep(5000);

        http.setMethod("post");
        http.setUrl(variables.slackWebhookUrl);
        http.addParam(
            type = "formField",
            name = "payload",
            value = serializeJson(data)
        );

        http.send();

    // }

}
4

1 に答える 1

2

クレジットは、私を正しい方向に向けてくれた Adam Cameron に贈られます。結局のところ、 cfthreads のスコープは非常に複雑です。

簡潔にするために、将来スレッドを使用するときは次のルールに従うとだけ言っておきます。

  1. 「スレッドブロック」外のスコープから変数を参照しないでください
  2. 参照する必要がある「親スコープ」データを明示的にスレッドに渡します
  3. 基本的に cfthread を cfmodule として扱います (属性を介してデータを渡します)

これは作業コードです:

    // push to slack!   
    public function push(options = {}) {

        var data = {
            "text": "Default message",
            "channel": "activity"
        };

        structAppend(data, options);

        thread
            action="run"
            data="#data#"
            slackUrl="#variables.slackWebhookUrl#" {

            var http = new http();

            http.setMethod("post");
            http.setUrl(attributes.slackUrl);
            http.addParam(
                type = "formField",
                name = "payload",
                value = serializeJson(attributes.data)
            );

            http.send();

        }

    }
于 2016-01-09T00:59:45.037 に答える