Javascript 一种异步方法
目标- 将实时验证添加到输入,仅取消该验证的XHR部分 问题- 将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
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
,我直到下一个周期才知道它。为什么?这与他的原始代码所做的事情完全相同(他返回了承诺)。