2016-01-08 14 views
3

当我将下面的线程相关代码注释掉时,向slack API的提交按预期工作。但是,当我尝试在线程命令内处理提交时,提交从未完成。基于脚本的组件中的线程无法正常工作

我做错了什么?在铁路运行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(); 

    // } 

} 
+0

你不需要给你的线程命名吗? –

+0

你在看什么让你觉得提交不通过? –

+0

谢谢你们。我已经尝试过,并且没有名称属性。根据cfdocs,name属性不是必需的。我正在myapp.slack.com上查看我的Slack频道,以确认是否未提交已处理。没有线程,立即发布,没有。 –

回答

2

信贷去亚当卡梅隆指出我在正确的方向。事实证明,scoping is quite tricky with cfthreads

为了简洁起见,我只想说,在未来的使用线程的时候我会遵循以下规则:

  1. 不引用“线程块”
  2. 明确外,从范围的任何变量传递到线程的任何“父范围”数据,你需要引用
  3. 基本上把上述cfthread作为cfmodule(通过属性传递数据)

这是工作鳕鱼e:

// 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(); 

     } 

    }