$("#search") .onAsObservable("keyup change") .select( (ev) -> $(ev.target).val()) .where( (query) -> query.length > 2) .throttle(300) .distinctUntilChanged() .select(queryMovie) .switch() .subscribe(updateMovies) ### lastEvent = {} currentDisplay = "" $("#search").on("keyup change", (ev)-> ref = {} lastEvent = ref query = $(ev.target).val() return if query.length < 3 setTimeout( ()=> return if lastEvent != ref return if currentDisplay == query currentDisplay = query queryMovie(query).then((results)=> return if query != $(ev.target).val() updateMovies(results)) , 300) ) ###