Javascript 如果在时间运行时收到数据,如何重置设置超时?

Javascript 如果在时间运行时收到数据,如何重置设置超时?,javascript,vue.js,settimeout,cleartimeout,Javascript,Vue.js,Settimeout,Cleartimeout,我在VUE应用程序中有一个文本类型输入,我在其中收集数据,当我收集完数据后,我必须显示另一个组件 <input type="text" v-model="textFormInfo.text" @keypress="onChangeText($event)" />

我在VUE应用程序中有一个文本类型输入,我在其中收集数据,当我收集完数据后,我必须显示另一个组件

                <input
                type="text"
                v-model="textFormInfo.text"
                @keypress="onChangeText($event)"
                />
                <div class="loader-spinner" v-if="loading">
                  <app-loader ref="spinner"/>
                </div>


export default {
  data() {
    return {
      myTimeout: null
    };
  },



    onChangeName(event) {
      if (event.target._value.length > 0) {
        this.loading = true;
        this.myTimeout = setTimeout(() => (
          this.isNameCompleted = true, 
          this.loading = false,
          this.isLoaderFinished = true,
          this.$refs.scrolled_3.focus()), 2200);
      }
    }

问题是,如果键入速度慢或信息太长,则在您完成键入之前会显示下一个组件。 我试图确保每次收到按键时,我都会重置settimeout,以便只有当我停止接收按键时,才会应用总settimeout值

我尝试了下面的例子,其中使用了clearTimeout方法,但我不知道在这种情况下如何实现它。 我怎么能得到这个?任何想法


问候并提前感谢您的时间和帮助

我认为您在这里试图实现的是去抖动如果我是正确的,您可以这样做,每次按kry键,我们都会创建一个超时,如果在特定时间内未按该键,则会调用settimeout中的方法

var timeoutId = 0;
    function keypress() {
          if (timeoutId >= 0) {
            clearTimeout(timeoutId);
          }
          timeoutId = window.setTimeout(() => {
            callMethod();
          }, 500);// time to wait to listen for next keypress if not pressed callMethod will execute
        }

非常感谢,这正是我想要的互动!谢谢你的帮助