示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vue 钩子函数 使用async await</title>
</head>
<body>
<div id="app">
<div v-for="item in list">
{{ item }}
</div>
</div> <script src="https://cdn.bootcss.com/vue/2.5.17/vue.min.js"></script>
<script type="text/javascript">
var app = new Vue({
el: '#app',
data: {
list: [1, 2, 3]
},
async created(){
// 最先输出3
console.log(3)
await setTimeout(()=>{
// 1输出的时间依赖于 定时间隔
console.log(1)
},100)
// 5的输出顺序也不是在1后面
console.log(5)
},
async mounted(){
// 其次输出4
console.log(4)
await setTimeout(()=>{
// 2输出的时间依赖于 定时间隔
console.log(2)
},100)
// 6的输出顺序也不是在2后面
console.log(6)
}
})
</script> </body>
</html>

通过设置created和mounted中定时时间不同,查看控制台输出顺序。

完全乱套!

只能保证最先输出3 其次输出4

await后的 5 和 6 也不是在await后输出。

结论是:所有的钩子函数都只是在指定时间执行而已,框架并不关心它们执行的结果,所以你要做的是将async和await放到真正有异步的methods的方法中。

更新!上面代码啪啪打脸

await后不能接收非Promise对象。

请参考:https://www.jianshu.com/p/2afb088abd08

await setTimeout(...) 或者 await exec(...) 是不行滴,await 不是什么都等,它等待的只是Promise,你如果没有给他返回个Promise,那它还是会继续向下执行。

所以 await 等待的不是所有的异步操作,等待的只是Promise。

所以await 挡不住啊!

vue 钩子函数 使用async await的更多相关文章

  1. Vue钩子函数生命周期实例详解

    vue生命周期简介 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁 ...

  2. Vue钩子函数

    Vue的生命周期函数 beforeCreate:function(){ console.log('1-beforeCreate 初始化之后'); }, created:function(){ cons ...

  3. vue 钩子函数的使用

    1.什么是自定义指令,有哪些钩子函数及自定义指令的使用场景 ①自定义指令是什么?以及自定义指令的使用场景 在Vue中,有很多内置指令,但是这些指令只能满足我们最基础的使用,当我们在实际项目中遇到了必须 ...

  4. generator函数与async/await

    理解async函数就要先理解generator函数,因为async就是Generator函数的语法糖 Generator 函数 Generator 函数是 ES6 提供的一种异步编程解决方案,可以先理 ...

  5. vue 钩子函数的初接触

    vue-router的路由钩子函数: 第一种:全局钩子函数. router.beforeEach((to, from, next) => { console.log('beforeEach') ...

  6. vue 钩子函数

    beforeRouteEnter 方法名称: beforeRouteEnter 调用时机: 切换路由之前,调用该方法时,页面还没有切换 next调用时机: activated 之后 注意事项: thi ...

  7. vue钩子函数的妙用之“created()和activated()”

    一.created() 在创建vue对象时,当html渲染之前就触发: 但是注意,全局vue.js不强制刷新或者重启时只创建一次, 也就是说,created()只会触发一次: 二.activated( ...

  8. vue 钩子函数中获取不到DOM节点

    原文链接:https://jingyan.baidu.com/article/f96699bbfe9c9d894f3c1b4b.html 两种解决方案: 1:官方解决方案: 受到 HTML 本身的一些 ...

  9. VUE钩子函数created与mounted区别

    created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图. mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作.

随机推荐

  1. git pull的时候出错: Git Couldn't reserve space for cygwin's heap

    具体: 1. 运行CMD,以管理员身份打开 2. 运行:rebase.exe -b 0x50000000 msys-1.0.dll 再次git pull的时候,不再报错 转自:http://doc.o ...

  2. 小米路由通过SSH添加静态路由表之后无法跳转的问题

    1.确定系统已经开启了转发功能: /etc/sysctl.conf下的配置项目为net.ipv4.ip_forward = 1 2.关闭防火墙的REJECT,也就是修改/etc/config/fire ...

  3. MyBatis连接SQL Server的关键点

    一.Maven包配置 <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc --> < ...

  4. Hex-Rays Decompiler

    https://www.hex-rays.com/products/decompiler/ We are pleased to present our flagship product, the He ...

  5. USB ISP(ICSP) Open Programmer < PWM ADC HV PID >

    http://sourceforge.net/projects/openprogrammer/?source=navbar Open Programmer http://openprog.alterv ...

  6. 如何让access空值变成0?(确切的说是让access Null值变成0)

    方法一 if  IsNull(Me.新_退休费) = True Then Me.新_退休费 = 0 方法二 if Nz(Me.原_退休费) = Me.原_退休费 Then Me.原_退休费 = 0 有 ...

  7. pytest文档15-使用自定义标记mark

    前言 pytest可以支持自定义标记,自定义标记可以把一个web项目划分多个模块,然后指定模块名称执行.app自动化的时候,如果想android和ios公用一套代码时, 也可以使用标记功能,标明哪些是 ...

  8. UITableView与UIScrollView的一些问题(持续更新)

    UITableView的一些常用操作 --------------------------------------------------------------------------------- ...

  9. Android之MVC——Model通知View去更新(实用)

    下面两段标红加深的代码是重点: import android.app.Activity; import android.os.Bundle; import android.view.View; imp ...

  10. 如何判断某版本的.NET Framework是否安装

    1..NET Framework .NET Framework2.0    键:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\N ...