async 、await、Promise

1 篇文章 0 订阅
1 篇文章 0 订阅

async 和 await 的使用

参考文档:

作用:

  • 异步代码以同步的方式进行书写。代码本身依旧是异步的。

用法:

例🌰一:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>asyncawait 的使用</title>
</head>
<body>
    <button id="btn">模拟登录</button>
</body>
<!-- 导入 axios -->
<script src="./axios.min.js"></script>
<script>
    // 得到按钮
    let btn = document.querySelector('#btn')
    
    // 原本写法:添加点击事件
    btn.onclick = function() {
        // 异步请求(异步书写)
        axios({
            url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',
            method: 'POST',
            data: {
                mobile: '13838383838',
                code: '123456'
            }
        }).then(res => {
            console.log(res)
            // 大量的逻辑代码
        })
    }
    // 改进写法:添加点击事件
    btn.onclick = async function() {
        // 异步请求(同步书写)
        let res = await axios({
            url: 'http://ttapi.research.itcast.cn/app/v1_0/authorizations',
            method: 'POST',
            data: {
                mobile: '13838383838',
                code: '123456'
            }
        })
        console.log(res)
    }
</script>
</html>

例🌰二:

<template>
	<div>
		<button @click="login">登录按钮</button>
	</div>
</template>

......

data(){
	return{
		obj:{
			mobile: '13838383838',
			code: '123456',
		}
	}
},
methods:{
	// 原本写法
	login(){
		// 异步请求代码
		apiLogin(this.obj).then(res => {
			console.log(res.data.data)
		}
	}

	// 改进写法
	async login(){
		let res = await apiLogin(this.obj)
		console.log(res.data.data)
	}
}

例🌰三:

var now = Date.now();

// Promise 写法:
Pet.create({
    id: 'g-' + now,
    name: 'Gaffey',
    gender: false,
    birth: '2007-07-07',
    createdAt: now,
    updatedAt: now,
    version: 0
}).then(function (p) {
    console.log('created.' + JSON.stringify(p));
}).catch(function (err) {
    console.log('failed: ' + err);
});

// await 写法:
(async () => {
    var dog = await Pet.create({
        id: 'd-' + now,
        name: 'Odie',
        gender: false,
        birth: '2008-08-08',
        createdAt: now,
        updatedAt: now,
        version: 0
    });
    console.log('created: ' + JSON.stringify(dog));
})();

以上是往数据库中塞一些数据,可见 await 的写法更好一些。

Promise

以轮询为例:

<script>
export default {
  data () {
    return {
      pollingST: null
    }
  },
  methods: {
    // 分页change事件
    pageChange (params) {
      // 清除现有定时器
      clearTimeout(this.pollingST)
      // 调用轮询
      this.polling(params)
    },
    // 请求接口方法
    getData() {
      return new Promise(resolve => resolve({}))
    },
    // 轮询方法
    polling() {
      this.getData().then(res => {
        this.pollingST = setTimeout(() => {
          clearTimeout(this.pollingST)
          this.polling(params)
        }, 10000)
      })
    }
  },
  created () {
    this.polling() // 调用轮询
  },
  destroyed () {
    clearTimeout(this.pollingST)
  }
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值