rules校验需要返回promise的问题

rules校验需要返回promise的问题

const rule = {

bucketNameRules() {

const valid = (rule, value) =>

new Promise((resolve, reject) => {

const reg = /^(?![-])[a-z0-9-]{3,63}(?<![-])$/

if (value.length < 1) {

reject('名称不能为空')

}

if (value.length < 3 || value.length > 63) {

reject('请输入 3~63 个字符')

} else if (!reg.test(value)) {

reject('允许小写字母、数字、短横线(-),且不能以短横线开头或结尾')

}

// 调用接口查询是否重复

bucketNameCheck({

bucketName: value

}).then((res) => {

if (res.available) {

resolve()

} else {

reject('该Bucket已存在,或被其他用户占用')

}

})

})

return { validator: debounce(valid, 800, false), trigger: 'change', required: true }

}

}

Warning: callback is deprecated. Please return a promise instead.

validator: debounce(valid, 800, false) debounce之后返回的就不是个Promise对象了?

在加上debounce之前是有效的


回答:

validator函数需要返回一个promise,没用debounce前,valid的功能满足validator的要求,但是debounce包裹valid后会返回一个新的函数,你确定这个函数的功能满足validator的要求吗。一般debounce的封装如下,可以看出它返回的匿名函数是没有返回值的

function debounce(callback, time, isImmediate){

var timer = null; //初始化timer,作为计时清除依据

return function() {

var context = this; //获取函数所在作用域this

var args = arguments; //取得传入参数

clearTimeout(timer);

if(isImmediate && timer === null) {

//时间间隔外立即执行

fn.apply(context,args);

timer = 0;

return;

}

timer = setTimeout(function() {

fn.apply(context,args);

timer = null;

}, delay);

}

}

你的trigger为change,这只会在change的时候触发validator,所以没必要使用debounce,如果非要使用,就需要让debounce返回的函数满足validator的要求

以上是 rules校验需要返回promise的问题 的全部内容, 来源链接: utcz.com/p/937184.html

回到顶部