概述

今天看别人的单元测试代码的时候碰到了一段代码 await Vue.nextTick(),初看起来不是很懂,后来通过查资料弄懂了,记录下来,供以后开发时参考,相信对其他人也有用。

await Vue.nextTick()

我们都用过 Vue.nextTick,但是在用的时候会在里面加一个回调函数的,但是有人直接这么使用:

await Vue.nextTick();

这是为什么呢?使用场景又是什么呢?

Vue.nextTick

要了解这段代码的含义,我们首先来看 Vue.nextTick() 如果不加回调函数会怎样?

通过查阅官方文档,可以知道,Vue.nextTick() 里面如果加了回调,则会在下次 DOM 更新循环结束之后执行延迟回调。如果在修改数据之后立即使用这个方法,则可以获取更新后的 DOM。如果没有提供回调且在支持 Promise 的环境中 则会返回一个 Promise!!!

所以 await Vue.nextTick() 相当于在 await 后面加了一个 Promise。

await

await 后面加一个 Promise 又会怎样呢?

通过查阅资料,我们可以知道,await 后面必须跟 Promise,否则会报错;如果跟了 Promise,那么当执行到这里的时候,会先返回,等 Promise 返回后,再继续执行下面的代码。比如下面这段代码:

async function f1() {
console.log('xxxx');
await new Promise();
console.log('tttt');
}

当执行到 await new Promise(); 时,会先返回,等 Promise resolve 之后再才执行下面的 console.log('tttt');

示例

下面是一个简单的示例:

function genPromise() {
return new Promise(resolve => {
console.log('await start');
setTimeout(() => {
console.log('await end');
resolve();
}, 0);
});
} async function f1() {
console.log('xxxx');
await genPromise();
console.log('should be after await end');
} f1();

最后的打印结果是:

xxxx
await start
await end
should be after await end

所以 await Vue.nextTick() 就和这个类似,它会在等 DOM 更新之后再执行后面的代码,其实就相当于把里面的代码拿出来写在后面了(仔细一想,这不就是 await 的常规用法吗?)

最新文章

  1. CSS float
  2. Android Studio导出Jar包并混淆
  3. CSS3-html,样式与样式表的创建,选择器
  4. TCP_NODELAY 和 TCP_CORK主要区别
  5. PHP Mail 简介
  6. hdu Train Problem I(栈的简单应用)
  7. 《第一行代码》学习笔记29-内容提供器Content Provider(2)
  8. UCTF Final-Hackventure
  9. WebConfig自定义节点并读取
  10. ABP+AdminLTE+Bootstrap Table权限管理系统第七节--登录逻辑及abp封装的Javascript函数库
  11. java.lang.RuntimeException: Class "org.apache.maven.cli.MavenCli$CliRequest" not found
  12. VMware虚拟机看不到共享目录
  13. 微信WeixinJSBridge API使用实例
  14. 对于DQN的三大改进 - 这篇讲的好些
  15. mysql my.cnf 配置建议
  16. SaltStack 批量安装软件
  17. 【附2】hystrix详述(2)- 配置
  18. [Objective-C语言教程]结构体(17)
  19. 搭建hustoj
  20. 第二百四十七节,Bootstrap按钮和折叠插件

热门文章

  1. EF6
  2. VUE点击颜色选中
  3. [易学易懂系列|rustlang语言|零基础|快速入门|(12)|Enums枚举]
  4. Redis数据类型之散列表
  5. 浅谈javaScript中的继承关系<一>
  6. 【NOIP2016提高A组五校联考4】label
  7. [LOJ 6704] 健身计划
  8. 19. ClustrixDB 执行计划解读
  9. tomcat7 与tomcat8 使用tomcat dbcp pool注意对应类变化
  10. html abbr标签 语法