OPA 服务器超时



我有以下错误:

Error: uncaught OPA exception {OpaRPC_Server: {timeout: {client: {client: $"j98soqx7hbavgq2scg915j7mlkctdeop"$; page: $1
042254815$}; fun_id: $"_v0_get_value_stdlib.core.xhtml"$}}}

使用下面的简单代码:

function start()
{
  content = <textarea style="width:30%;" rows=1 id=#text > text </textarea> <+>
  <div id=#copy></div>
  Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)})
  content
}

Server.start(
  Server.http,
  { page:start,
    title:"bug timer"
  }
)

当我关闭运行应用程序的选项卡时出现错误。尽管选项卡已关闭,但计时器似乎仍在继续工作事件。

我怎样才能阻止它?

谢谢

凯曼

您有几种方法可以解决问题。第一个是在调度函数启动异常时显式停止计时器。这给出了这样的东西:

function start()
{
   content = <textarea style="width:30%;" rows=1 id=#text > text </textarea> <+>
   <div id=#copy></div>
   recursive timer = 
     Scheduler.make_timer(3000, function() {
       @catch(function(exn){Log.error("EXN", "{exn}"); timer.stop()},
              #copy =+ Dom.get_value(#text))
       }
     )
   content
}

但是问题来了,因为你的计时器是在服务器端执行的(因为它是由启动函数创建的)。

因此,更好的解决方法是在客户端设置计时器。您有几种方法可以做到这一点。

1 - 只需标记您的计时器@client,它将在客户端顶层执行。但它有点"暴力"。因为它将在所有页面上启动。

@client x = Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)})

2 - 在 onready 事件中启动,计时器将在div #copy 准备就绪时启动。

function start()
{
  content = <textarea style="width:30%;" rows=1 id=#text > text </textarea> <+>
  <div id=#copy onready={function(_){
    Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)})
  }}
  ></div>
  Scheduler.timer(3000, function() {#copy =+ Dom.get_value(#text)})
  content

}

相关内容

  • 没有找到相关文章

最新更新