场景:

         我想要不调用一个接口的到结果然后复制 最后进行提交前的判断,但是再页面查询执行顺序总是执行到checkEnableTime这一行就直接跑到if(){}判断的地方,最后又回到checkEnableTime方法中 .then中进行赋值(这个时候已经晚了,我的判断么有起到正确过滤的作用)

解决:

       尝试使用setTimeout 让判断的代码延后500毫秒执行,确保接口调用和赋值给全局变量的完成,用正确的变量进行判断。这样做感觉不是很完美,但已经解决。如果又更好的方法请留言帮助我完善。

代码中有主要注释。

   

doCreate() {

      // 验证表单有效性
      this.$refs.createForm.validate(valid => {

//  这个是我想要调用的接口得到结果并进行赋值的操作

        checkEnableTime(this.model)
          .then(({ data }) => {
            this.checkEnableTime = data.detail;
          })
          .catch(error => {
            this.$message.error('验证异常')
          })
        
//使用setTimeout 确保其中执行延后500毫秒  确保上边的接口执行完毕并完成一系列操作再进行下边的判断

        setTimeout(() => {
          var remindTime = this.model.disableTime;
          var str = remindTime.toString();
          str = str.replace('/-/g', '/');
          var oldTime = new Date(str).getTime();
          if (this.model.disableTime <= this.model.enableTime || oldTime <= new Date().getTime()) {
            this.$message.error('失效时间必须大于生效时间和当前时间');
            return;
          }
          if (this.checkEnableTime === false) {
            this.$message.error('您选择的生效期中已经有其他启动页正在生效,请重新选择生效期');
            this.checkEnableTime = null;
            return;
          }
          if (valid) {
            createAppSplashScreen(this.model)
              .then(data => {
                this.$message.success('操作成功');
                this.btnLoading = false;
                this.show = false;
                this.$emit('done')
              })
              .catch(error => {
                // do something
              });
          } else {
            return false;
          }
        }, 500)
      });
    },

 

Logo

前往低代码交流专区

更多推荐