【问题标题】:thread in script based component not working基于脚本的组件中的线程不起作用
【发布时间】:2016-04-12 15:43:23
【问题描述】:

当我注释掉下面与线程相关的代码时,向 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();

    // }

}

【问题讨论】:

  • 你不需要给你的线程命名吗?
  • 你在看什么让你认为提交没有通过?
  • 谢谢大家。我已经尝试过,没有 name 属性。根据 cfdocs,name 属性不是必需的。我正在 myapp.slack.com 上查看我的 Slack 频道,以确认是否未处理提交。没有线程,立即发布,有它,什么都没有。
  • 您的...应用程序日志中是否没有错误(可能是您的异常日志,不记得它们去了哪里)?我怀疑您的线程看不到参数范围,并且您没有将 data 传递给它。
  • 谢谢亚当。今晚我会看看那些日志。既然您提到了它,我记得线程似乎无法访问它们创建的上下文中的变量(这总是让我失望)。我想我的新方法(我需要记住)是将 cfthreads 视为 cfmodules 并通过显式属性传递任何数据。我今晚会试试这个(根据你的评论)并发布更新。

标签: coldfusion cfml railo cfc cfthread


【解决方案1】:

感谢 Adam Cameron 为我指明了正确的方向。事实证明,scoping is quite tricky with 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();

        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多