【发布时间】:2018-03-23 05:59:01
【问题描述】:
我在 ScalaJS 应用程序中有一个搜索输入字段,当用户输入城市名称时,它会触发对后端服务器的请求。但是,我需要实现延迟,以便在一定延迟(比如 1000 毫秒)之后才会触发请求。如果没有这样的延迟,我有可能在搜索中得到误报(例如,如果用户想搜索“paris”,那么“par”就会出现误击 - 康沃尔的一个小镇, England - 当输入第三个字符时)
我尝试将等效的 JavaScript 转录为 Scala,但 setTimeout 部分似乎不起作用。
import scala.scalajs.js.timers.{SetTimeoutHandle, clearTimeout, setTimeout}
private def delay = () => {
// Set initial timeout to do nothing after 0 ms
var handle: SetTimeoutHandle = setTimeout(0)(() => {})
(fn: Function0[Unit], ms: Double) => {
clearTimeout(handle)
handle = setTimeout(ms)(fn)
}
}
然后我使用 Akka Actor 处理用户输入事件
def receive = {
/************************************************
* Client event
* The user has typed something into the search field
*/
case evt: Event =>
delay()(handleInput, 1000.0)
}
其中handleInput 是零参数函数,它获取用户的输入,然后向后端发出请求。
执行清除然后重置超时的匿名内部函数,但永远不会调用handleInput函数
谢谢
克里斯·W
【问题讨论】:
-
我已经编辑了原始问题以展示我尝试过的内容