ES7的async可以完全取代Promise吗?

challenger
  • 1.7k

ES7的async可以完全取代Promise吗?

回复
阅读 6.1k
5 个回答

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改写一下试试?

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();

asyncawait是基于Promise做到的.

ES7的asyncawait是一个代替Generator的语法糖。或者,严格的说也不是代替,只是写法更加简单,内部实现还是Generator

Generator要自运行,需要每一个value返回一个Promise。所以async-await也是一样的。

所以,async-awaitPromise是相辅相成,不存在替代关系。

async/await与Promise是相辅相成相互配合的

宣传栏