Javascript 一种异步方法

Javascript 一种异步方法,javascript,promise,vuejs2,lodash,debounce,Javascript,Promise,Vuejs2,Lodash,Debounce,目标- 将实时验证添加到输入,仅取消该验证的XHR部分 问题- 将debounce添加到valueExists()会中断wait。如果没有debounce,它将正确地等待 这应该如何处理 methods: { async validate () { let local_errors = []; if (!!this.value && !this.$data.alpha_dash.test(this.value)) { local_errors.p

目标-

将实时验证添加到输入,仅取消该验证的XHR部分

问题-

debounce
添加到
valueExists()
会中断
wait
。如果没有
debounce
,它将
正确地等待

这应该如何处理

methods: {
  async validate () {
    let local_errors = [];

    if (!!this.value && !this.$data.alpha_dash.test(this.value)) {
      local_errors.push('Invalid character');
    }

    if (!!this.value && await this.valueExists()) {
      local_errors.push('Already used');
    }

    return local_errors;
  },

  valueExists: _.debounce(function () {
    return axios.get(route('organization.slug.exists', { slug: this.value }))
      .then(response => {
        return false;
      })
      .catch(error => {
        return true;
      });
  }, 1000)
}

将async添加到取消公告的函数应该可以工作:

valueExists: _.debounce(async function () {
    await axios.get(route('organization.slug.exists', { slug: this.value }))
      .then(response => {
        return false;
      })
      .catch(error => {
        return true;
      });
  }, 1000)

那么,当取消绑定命中时,您希望
valueExists
返回什么?一旦承诺被解析,则返回布尔值。取消绑定通过不调用函数来工作。那么,你的意思是什么承诺?你使用哪个库来实现
debounce
方法,下划线?Lodash?表示“对取消公告的函数的后续调用返回最后一次func调用的结果”。但默认情况下,该函数在后缘调用-因此在最初的几个调用中根本没有承诺。谢谢。现在发生的情况是,第一次调用
validateLogicly()
valueExists()
仍然是
null
。一旦承诺被解析,它最终会返回布尔值,但我必须再次调用
validateLocaly()
才能看到它。您可以为初始化组件使用默认的false值,一旦承诺被解析,会发生什么变化?如果我正确地遵循Yes,但如果它返回
true
,我直到下一个周期才知道它。为什么?这与他的原始代码所做的事情完全相同(他返回了承诺)。