vue 使用 setTimeout 页面保证接口调用完毕再继续执行接下来的代码 确保执行顺序

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

场景:

         我想要不调用一个接口的到结果然后复制 最后进行提交前的判断,但是再页面查询执行顺序总是执行到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)
      });
    },

 

事件循环:宏任务+微任务+UI的执行顺序 这主要和js的用途有关。js作为浏览器的脚本语言,最初被创造出来是为了在浏览器中操作 DOM、实现简单的交互。若是js是多线程的现在有两个线程,p1,p2p1,p2想操作同一个dom元素,一个执行删除操作,一个执行修改操作;那么,我们应该听哪一个的呢?因此,这就意味这js只能是单线程; 阅读详情

相关推荐

Vue - 实现将 Ajax 异步网络请求改为同步执行等待 Promise 风格的接口请求完毕执行后面的代码(适用于 “等待接口数据获取成功后,在执行下面的语句“ 等需求)超详细示例及注释解决方案

jsvue如何将ajax请求从异步改为同步,vue请求接口是异步的怎么修改成同步,vue异步请求接口获取数据改为同步,不获取到数据不往下执行vue怎么等待接口数据获取完毕后再执行下面的代码vuejsJS异步改为同步示例代码vue等待axiosajax请求完毕获取到数据后再执行其他代码vue将异步执行的axios请求设置为同步执行vue如何使用async、await实现同步请求,vue如何将Ajax请求从异步改为同步,vue如何把网络请求,把异步改成同步呢?jsvue如何把定时器se

🏆 前端领域优质创作者 6030

vue实现在一个方法执行完后执行另一个方法

使用回调函数处理异步操作。在异步方法中传入一个回调函数,然后在异步方法完成后调用回调函数。Vue 中也可以使用 async/await 语法糖来处理异步操作。2、 使用 async/await。

askuld的博客 8667

vue项目中阻止某个接口请求

let CancelToken = axios.CancelToken; let self = this; let urlP=`https://event.csdn.net/logstores/csdn-pc-tracking-page-exposure/track?${params.titleSymbol}`;//接口路径 因为是get请求 我就直接这么写了 axios.get...

qq_39598092的博客 3382

vue 多个api请求_vue-axios同时请求多个接口 等所有接口全部加载完成再处理操作...

我就废话不多说了,大家还是直接看代码吧~Axios.all([request1, request2, request3]).then(Axios.spread((area, acct, perms) => {console.log("全部加载完成")})).catch(err => {console.log(err.response)});需要在当前路由引入axiosimport Ax...

weixin_32667955的博客 3086

created方法中调用接口执行顺序控制

然后我又想到setTimeout,定时器是直接解决函数执行顺序的方法了,但是同样也有弊端,因为没有办法确定第一个调用接口的响应时长,设置过长,用户体验感势必不会太好,设置过短,如果更换服务器或者网络过慢,后续接口就不会调用,引起更大的问题。众所周知,vue是单页面应用,我们在加载一个页面的时候,有些接口需要在页面创建时就调用,从接口中获取数据,然后渲染在页面上,简单来说就是在钩子函数created阶段调用接口。那么重点来了,调用接口我们是要操作数据啊,那么,调用其他方法自然也是操作数据的一部分,

m0_56683897的博客 1064

vue中Promise.then,this.$nextTick 和 setTimeout执行优先级,以及nextTick 的内部实现原理

和都属于微任务,优先级较高。setTimeout属于宏任务,优先级较低。在同一个事件循环中,所有微任务执行完毕后才会执行宏任务。理解这些机制的差异可以帮助你更好地控制异步操作的执行顺序确保在合适的时间点进行 DOM 操作或其他依赖更新的数据处理。:更适合在 Vue 的数据更新和 DOM 渲染之后执行回调。它保证了回调在 DOM 更新完成之后执行,因此非常适合需要操作更新后 DOM 的情况。setTimeout:更通用的异步执行方法。它不会等待 DOM 更新完成,只会在当前事件循环结束后执行回调。

为了WLB努力 1583

nextTick用法、setTimeout用法、setInterval用法

setInterval:每次执行的间隔是固定的,但如果函数执行时间超过间隔时间,会导致多个任务堆积(例如,间隔 1 秒的函数执行需 1.5 秒,后续任务会立即执行)。setTimeout 递归:通过递归调用确保每次执行的间隔是“延迟时间 + 函数执行时间”,避免任务堆积,更适用于需要严格间隔的场景(如轮询)。:setTimeout 是异步方法,即使延迟为 0,回调函数也会被放入任务队列,等待当前执行栈清空后才执行。延迟时间(毫秒),默认值为 0,表示立即将任务加入队列,但不保证立即执行

weixin_46011290的博客 1304

for循环中嵌套setTimeout执行顺序和结果该如何理解?

这两天在捣鼓作用域的问题,有的时候知识这个东西真的有点像是牵一发而动全身的感觉。在理解作用域的时候,又看到了一道经典的面试题和例子题。 那就是在for循环中嵌套setTimeout延时,想想之前面试的时候面试官问到我这个问题,然而我当时对这玩意儿根本没有深究,没有去理解;非常草率的回答了,面试官好心的给我 说这个涉及到setTimeout回调函数异步特性,啪啦啪啦,说的好几句都感觉晕...

aoyi2760的博客 497

JS中含有异步操作的执行顺序

看下面这个简单的例子,我们将会了解到JS异步操作的体现: setTimeout(function(){ console.log(9); },0); //设置一个定时器 console.log(5); 这段代码的输出顺序是什么? 如果你的答案是9,5.那么有点遗憾,输出顺序是5,9. Why? 在Javascript引擎线程中,存在着一个主线程和一个任务队列,同步任务会在其主线程中执行,而一...

zhang1339435196的博客 2425

$nextTick vs 定时器:Vue的‘等一等‘和JS的‘睡一会‘有啥区别?

今天咱们来聊聊Vue里的$nextTick和JavaScript的setTimeout,这两个都能让代码"等会儿再执行",但到底有啥不同?相信看完这篇你就彻底明白了!

欢迎来到我的前端博客!这里汇集了关于前端开发的最新技术、实用工具和经验分享。我将为你提供详细的教程、代码示例和实战案例,帮助你掌握Web开发的核心概念和技能。不论你是初学者还是有经验的开发者,这个博客都适合你。 783

Vue中nexttick

nexttick是什么? 官方的定义: 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM 用法: 接收一个回调函数作为参数,作用是将回调函数延迟到下一次dom更新完毕使用。如果没有传入回调函数,并且在支持promise的环境中,会返回一个promise对象 使用场景: 在对数据进行赋值之后,需要对新dom做一些操作的时刻,但是此刻最新的dom还没有进行更新。 为什么数据赋值后,不会立马更新dom 原因: vue 更新dom是异步执行的。监听到

qq_39692513的博客 1万+

JS的执行顺序和事件循环

vue nextTick其实就是将dom更新后的操作当成微任务加到dom更新微任务的后面,保证执行顺序,再不行就使用setTimeout宏任务代替,在下一轮事件循环中执行,这也是为什么Promise.then的优先级比setTimeout高。先执行onblur事件的同步方法,然后执行点击事件的同步方法,并不是两个函数同时执行的,一定是有先后顺序的。只有已完成的异步任务才会被加入到微任务队列中等待执行!:点击按钮的同时触发画面其他项目的onblur事件(

weixin_40551478的博客 306

nextTick 与 setTimeout 对比

vue中,DOM的更新和渲染是异步的(简单说并不是数据发生变化后立即更新DOM,而是按照一定的策略进行DOM的更新)。,是搜索一个数据后 组织树el-tree展开对应的树节点高亮,并且滚动条 滚动到组织树的中间位置,以便于可以看到高亮节点.宏任务:整体代码script,setTimeout,setInterval,setImmediate。先执行整体代码执行过程中有新的宏任务/微任务,就将他们推入相应的任务队列。然后执行微任务,执行完所有的微任务后,在执行宏任务。以上代码是可以实现滚动到节点位置的。

qq_44062823的博客 304

深入解析setTimeout与setInterval:事件循环、性能陷阱与最佳实践

在JavaScript异步编程中,理解任务调度机制是构建响应式应用的基础。其核心原理基于事件循环(Event Loop),它协调宏任务与微任务的执行顺序确保非阻塞的用户体验。掌握这一原理对于优化代码性能、避免界面卡顿至关重要,尤其在处理动画、轮询等需要时间控制的场景时。本文聚焦于前端开发中最常用的两个调度函数——setTimeout和setInterval,通过剖析其注册、队列和执行的完整流程,揭示其延迟不精确的本质原因及可能引发的内存泄漏风险。文章将结合事件循环、宏任务等热词,详细阐述在复杂异步时序下的

weixin_34221332的博客 1019

深入解析JavaScript定时器:从setTimeout原理到防抖节流实战

在JavaScript异步编程中,事件循环机制是理解定时器执行原理的核心基础。通过宏任务与微任务的调度模型,开发者可以掌握代码执行的时序控制。定时器技术在前端工程实践中具有重要价值,尤其在处理用户交互优化、数据实时更新等场景时不可或缺。setTimeout和setInterval作为基础API,能够实现函数防抖与节流,有效解决高频事件带来的性能问题。本文聚焦定时器的工作原理、常见陷阱及性能优化方案,帮助开发者深入理解时间调度在前端开发中的应用实践。

weixin_30645617的博客 388

Vue.js 中this.$nextTick()用法

简单地说nextTick()可以在当前代码块的同步代码执行完毕后,立即执行传入的回调函数。通常情况下,Vue 在更新 DOM 时是异步执行的。当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新,这意味着如果你想在 DOM 更新后立即执行一些操作,可能会遇到问题。这时就可以使用nextTick()方法来确保回调函数在 DOM 更新后立即执行。需要注意的是,nextTick()方法是异步的,所以回调函数的执行顺序是不确定的。

qq_57223591的博客 3140

uni-app小程序生命周期深度解析:onShow重复执行与TabBar页面加载机制

在跨端应用开发中,理解页面生命周期是构建稳定应用的基础。生命周期函数如onLoad、onShow等,本质上是框架对原生平台事件的封装与映射,它们定义了组件从创建、显示到销毁的关键节点。掌握其触发原理,能帮助开发者精准控制数据初始化、视图更新与资源清理,从而提升应用性能与用户体验。在实际工程中,生命周期管理常面临两大核心挑战:一是页面显示事件(如onShow)的重复触发问题,这通常与页面栈管理、后台切换及组件渲染机制相关;二是TabBar页面的实例缓存策略,导致onLoad函数仅在首次加载时执行。这些现象在u

weixin_30614109的博客 339

vue延时加载setTimeout与先后加载Promise.all

vue延时加载setTimeout与先后加载Promise.all

ffl886的博客 649
上一篇: vue dialog的蒙层问题
下一篇: vue + element使用页面选择的日期和当前日期进行比较
心黑红卜萝
博客等级 码龄8年 49粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值