- 概念
promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件更加强大;promise相当于是一个容器,里面存放着成功和失败的结果,这些解决方案一旦生成是无法改变的。
async await也是一种异步解决方案,它遵循的是Generator 函数的语法糖,拥有内置的执行器,不需要额外调用函数,返回一个promise对象。
- 两者的区别:
- Promise的出现解决了传统callback函数导致的“回调地狱回调地狱”问题,但它的语法导致了它向纵向发展行成了一个回调链,遇到复杂的业务场景,这样的语法显然也是不美观的。而async await代码看起来会简洁些,使得异步代码看起来像同步代码,await的本质是可以提供等同于”同步效果“的等待异步返回能力的语法糖,只有这一句代码执行完,才会执行下一句。
- async await与Promise一样,是非阻塞的。
- async await是基于Promise实现的,可以说是改良版的Promise,它不能用于普通的回调函数。
loadScript('1.js', function(error, script) { if (error) { handleError(error); } else { // ... loadScript('2.js', function(error, script) { if (error) { handleError(error); } else { // ... loadScript('3.js', function(error, script) { if (error) { handleError(error); } else { // ...加载完所有脚本后继续 (*) } }); } }); } });
上述代码向我们展示了”回调地狱“的场景,可以看出,这样的代码可读性以及可维护性极低,丢失了编写代码的优雅。