FreeChilly 2022-03-03 16:34 采纳率: 50%
浏览 206

vue在输入框防抖的时候rules校验提示问题

问题遇到的现象和发生背景

给rule的valid函数加防抖后,Promise.reject仅仅会在控制台打印,不会在页面上弹出提示

问题相关代码,请勿粘贴截图
bucketNameRules() {
    const valid = (rule, value) =>
      new Promise((resolve, reject) => {
        const reg = /^(?![-])[a-z0-9-]{3,63}(?<![-])$/
        if (value.length < 1) {
          return 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 }
  },

运行结果及报错内容

Uncaught (in promise) ...

求大家帮忙解决!!

  • 写回答

1条回答 默认 最新

  • CSDN专家-showbo 2022-03-03 16:48
    关注

    改下面的,测试正常

    img

    
        var timer//////////////////////
        const valid = (rule, value) =>
            new Promise((resolve, reject) => {
                const reg = /^(?![-])[a-z0-9-]{3,63}(?<![-])$/
                if (value.length < 1) {
                    return reject('名称不能为空')
                }
                if (value.length < 3 || value.length > 63) {
                    reject('请输入 3~63 个字符')
                } else if (!reg.test(value)) {
                    reject('允许小写字母、数字、短横线(-),且不能以短横线开头或结尾')
                }
                // 调用接口查询是否重复
                clearTimeout(timer);//////////////////////
                timer = setTimeout(() => {
    
    ////////////////////////////////////////////ajax模拟代码,注意删除
                    setTimeout(() => {
                        var v = Math.random()
                        if (v > .5) resolve(`resolve-${v}`);
                        else reject(`reject-${v}`)
    
                    }, Math.random() * 2);
                    return;
    ////////////////////////////////////////////ajax模拟代码,注意删除
    
                    bucketNameCheck({
                        bucketName: value
                    }).then((res) => {
                        if (res.available) {
                            resolve()
                        } else {
                            reject('该Bucket已存在,或被其他用户占用')
                        }
                    })
                }, 800);
            });
    //直接配置为valid,对接口部分防抖
    ////return { validator: valid, trigger: 'change', required: true }
    
        valid({}, 'aa').then(res => console.log('aa'+res)).catch(res => console.log('aa'+res))
        valid({}, 'abcde').then(res => console.log('abcde'+res)).catch(res => console.log('abcde'+res))
        valid({}, 'abcde').then(res => console.log('abcde'+res)).catch(res => console.log('abcde'+res))
        valid({}, 'abcde').then(res => console.log('abcde'+res)).catch(res => console.log('abcde'+res))
    
    

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月3日

悬赏问题

  • ¥20 ARM64架构下SSCMS部署问题
  • ¥20 请教如何让移动端的热区自适应
  • ¥30 为什么深度学习网络训练会出现训练集和测试集准确率和损失都不变的情况
  • ¥15 (标签-3D|关键词-色模型)
  • ¥15 发现在MSVS2022中”#pragma once“不起作用
  • ¥15 实时声纹降噪算法进行无关说话人语音抑制
  • ¥100 adb针对解决手机锁屏问题(相关搜索:手机锁屏)
  • ¥15 发现哔哩哔哩的粉丝只能显示前5页能不能爬出来
  • ¥15 oracle数据库求解
  • ¥15 c++ websocketpp连接币安 有报错,有偿求解