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
做到的.
ES7的async
和await
是一个代替Generator
的语法糖。或者,严格的说也不是代替,只是写法更加简单,内部实现还是Generator
。
Generator
要自运行,需要每一个value返回一个Promise
。所以async-await
也是一样的。
所以,async-await
与Promise
是相辅相成,不存在替代关系。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
async不能完全取代Promise。
async本身就是基于Promise的语法糖。如果你懒得看语法细节,监测当前上下文能否支持async的代码里就能看出这一点:
然则,很多Promise方法你不能用async来定义,而只能用Promise的方式来定义。Promise就是用于解决回调问题的,而async的写法没办法在异步回调里插入resolve/reject……
尝试着用async改写一下试试?