У меня есть поле ввода поиска в приложении ScalaJS, которое отправляет запросы на внутренний сервер, пока пользователь вводит название города. Однако мне нужно реализовать задержку, чтобы запрос не запускался до определенной задержки (скажем, 1000 мс). Без такой задержки есть шанс, что я верну ложные срабатывания при поиске (например, если пользователь хочет найти «париж», то будет ложное попадание на «пар» — небольшой город в Корнуолле. , Англия - при вводе третьего символа)
Я попытался переписать эквивалент 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 никогда не вызывается.
Спасибо
Крис В.