promise 和 async await比较

 

async搭配await是ES7提出的,它的实现是基于Promise。这里使用它对比Promise的用法,这里只是简单的适合日常业务的使用场景。
 
async、await是ES7中的提案,通过同步方式的写法,使得代码更容易阅读。
 
注意:await函数不能单独使用,而且async函数返回的是一个Promise对象,可以使用then函数添加回调函数。当函数执行的时候,一旦遇到await函数就会先返回一个Promise对象,等到异步操作完成,再去执行后面的语句。如果 await 后面的异步操作出错,那么等同于 async 函数返回的 Promise 对象被 reject!
Promise是ES6的新特性,用于处理异步操作逻辑,用过给Promise添加then和catch函数,处理成功和失败的情况,下面就两种情况介绍异步,刚刚入门把自己的理解写出来沉淀一下。
 
function timeout(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
// 调用函数
async function asyncPrint(value, ms) {
await timeout(ms);
console.log(value);
}
// 调用函数
asyncPrint('timeout', 2000); // 2s之后打印出'timeout',如果不相信可以使用vscode编辑器的run code插件,会把执行时间展示给你!
 
下面是Promise的实现同样的功能
function timeout1(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
 
// 因为上面函数返回是的Promise对象,所以直接使用链式方法then时,是在Promise对象内的函数执行完之后执行的,这样就可以达到上面同样的结果
timeout1(5000).then(() => {
console.log('timeout1'); // 5s之后打印出'timeout1'
})
这里多啰嗦两句,即使我们的设定的延时器的时间是2s和5s,但是真的跑出来的时间其实会多于2s和5s,这是因为执行其他的代码也会浪费时间啊,只是我们的感知不强而已,而且这是没办法避免的。即使你写的时间间隔为0,它也不会实现理想情况下的立即执行,原因就是刚刚说的那样。
 
个人喜欢async和await的写法,主要是阅读代码的时候更加语义化,看着舒服。而且看到一些权威文章上也推荐async 、await 去处理异步情况,(原画:async函数可以说是目前异步操作最好的解决方案)。?
 
 

转载于:https://www.cnblogs.com/iOS-mt/p/11356563.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值