扫码关注官方订阅号
ES7的async可以完全取代Promise吗?
学习是最好的投资!
1、es7标准还没有出来,现在还是es6,这是一个泛盖的意思,es6之后以年份小版本迭代,2015.6发布的es6,2016.6发布的es6.1,现在6.2版本在酝酿中,明年年中才会出台,所以名字不要叫错了。2、其实 async 可以看出 Promise 的升级版,本质都是处理异步操作,本质上就是个 Promise。所有 async 函数都返回 Promise,没必要纠结是不是会取代,理论上新的会干掉老的~~
var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(function () { resolve(); }, time); }) }; var start = async function () { console.log('start'); await sleep(3000); console.log('end'); }; start();
async和await是基于Promise做到的.
async
await
Promise
ES7的async和await是一个代替Generator的语法糖。或者,严格的说也不是代替,只是写法更加简单,内部实现还是Generator。
Generator
Generator要自运行,需要每一个value返回一个Promise。所以async-await也是一样的。
async-await
所以,async-await与Promise是相辅相成,不存在替代关系。
async/await与Promise是相辅相成相互配合的
async不能完全取代Promise。
async本身就是基于Promise的语法糖。如果你懒得看语法细节,监测当前上下文能否支持async的代码里就能看出这一点:
function(){ return (async function(){ return 42; })() instanceof Promise }
然则,很多Promise方法你不能用async来定义,而只能用Promise的方式来定义。Promise就是用于解决回调问题的,而async的写法没办法在异步回调里插入resolve/reject……
function returnPromise(){ return new Promise(function(resolve,reject){ setTimeout(function(){resolve(42)}) }) }
尝试着用async改写一下试试?
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
1、es7标准还没有出来,现在还是es6,这是一个泛盖的意思,es6之后以年份小版本迭代,2015.6发布的es6,2016.6发布的es6.1,现在6.2版本在酝酿中,明年年中才会出台,所以名字不要叫错了。
2、其实 async 可以看出 Promise 的升级版,本质都是处理异步操作,本质上就是个 Promise。所有 async 函数都返回 Promise,没必要纠结是不是会取代,理论上新的会干掉老的~~
async和await是基于Promise做到的.ES7的
async和await是一个代替Generator的语法糖。或者,严格的说也不是代替,只是写法更加简单,内部实现还是Generator。Generator要自运行,需要每一个value返回一个Promise。所以async-await也是一样的。所以,
async-await与Promise是相辅相成,不存在替代关系。async/await与Promise是相辅相成相互配合的
async不能完全取代Promise。
async本身就是基于Promise的语法糖。如果你懒得看语法细节,监测当前上下文能否支持async的代码里就能看出这一点:
然则,很多Promise方法你不能用async来定义,而只能用Promise的方式来定义。Promise就是用于解决回调问题的,而async的写法没办法在异步回调里插入resolve/reject……
尝试着用async改写一下试试?