我正在处理Task节点的问题(Execution TimeOut(。我在场景节点中为连续执行功能创建了一个计时器。在这里,我尝试了使用任务节点和场景节点中使用的连续响应更新。
'计时器
m.Update = m.top.findNode("SampleID")
m.Update .observeField("fire", "UpdateSample")
m.global.responseurl = m.urlassign
m.Update.control = "RUN"
'我的功能
function UpdateSample()
m.Sample= CreateObject("roSGNode", "SampleTask")
m.Sample.control = "RUN"
?"m.global.responsecontent : " m.global.responsecontent
end function
'我的任务节点
sub init()
?"Start Init()"
m.DowndloadResponse = CreateObject("roUrlTransfer")
m.DowndloadResponse.SetUrl(m.global.responseurl)
m.Cont= m.DowndloadResponse.GetToString()
m.global.responsecontent = m.Cont
?"m.global.responsecontent : " m.global.responsecontent
?"End Init()"
end sub
这里,不是每次都得到下载响应。GetToString(("执行超时"。有时会出错。我试过使用m.top.functionname。但现在是Execution。我还在任务节点中尝试了定时器设置。但是运气不好。我需要它是多重的。我不知道哪一个是实现这一点的好方法。有人知道如何解决这个问题吗?
您使用Task节点不正确,必须绝对使用functionName
。
我还建议使用asyncGetToString()
,因为它可以让您读取响应代码。您还必须为HTTPS请求设置和初始化证书(Roku标准证书捆绑包应该这样做(。
你应该在你的任务线程函数中有这样的东西:
request = CreateObject("roUrlTransfer")
request.retainBodyOnError(true)
request.setUrl(url)
' Needed for HTTPS requests
request.setCertificatesFile("common:/certs/ca-bundle.crt")
request.initClientCertificates()
port = CreateObject("roMessagePort")
request.setPort(port)
timeout = 0 ' Force a timeout (0 equals "indefinite", or until Roku decides to terminate the request... ~60s)
event = wait(timeout, port)
if event <> invalid and type(event) = "roUrlEvent"
?"event.getString() "event.getString()
?"event.getResponseCode() "event.getResponseCode()
?"event.getFailureReason() "event.getFailureReason()
end if
' Ensure the request does not continue to run after the forced timeout is hit
' (Only necessary if you set a non-zero timeout)
request.asyncCancel()