javascript - ES7的async可以完全取代Promise吗?
PHPz
PHPz 2017-04-11 13:19:50
[JavaScript讨论组]

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

PHPz
PHPz

学习是最好的投资!

全部回复(5)
PHPz

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是相辅相成相互配合的

伊谢尔伦

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号