我已经在我的应用程序中使用 ECMAScript 6 和 ECMAScript 7 功能(感谢 Babel)——包括移动和 Web。
第一步显然是 ECMAScript 6 级别。我学到了许多异步模式、promises(非常有前途)、生成器(不确定为什么是 * 符号)等。其中,promises 非常适合我的目的。我在我的应用程序中经常使用它们。
这是我如何实现基本承诺的示例/伪代码-
var myPromise = new Promise(
function (resolve,reject) {
var x = MyDataStore(myObj);
resolve(x);
});
myPromise.then(
function (x) {
init(x);
});
随着时间的推移,我发现了 ECMAScript 7 的特性,其中之一是 ASYNC
和 AWAIT
关键字/函数。这些结合在一起创造了奇迹。我已经开始用 async & await
替换我的一些承诺。它们似乎为编程风格增加了很大的价值。
同样,这是我的异步等待函数的伪代码 -
async function myAsyncFunction (myObj) {
var x = new MyDataStore(myObj);
return await x.init();
}
var returnVal = await myAsyncFunction(obj);
撇开语法错误(如果有的话)不谈,我觉得它们做的事情完全一样。我几乎已经能够用 async,waits 替换我的大部分承诺。
当 promise 做类似的工作时,为什么需要 async,await?
async,await 是否解决了更大的问题?或者它只是回调地狱的另一种解决方案?
正如我之前所说,我能够使用 promises 和 async,await 来解决同样的问题。 async await 有什么具体解决的吗?
补充说明:
我一直在我的 React 项目和 Node.js 模块中广泛使用异步、等待和承诺。 React 尤其是早起的鸟儿,采用了很多 ECMAScript 6 和 ECMAScript 7 特性。
原文由 bozzmob 发布,翻译遵循 CC BY-SA 4.0 许可协议
async/await
只是让您对异步代码有一种同步的感觉。这是一种非常优雅的语法糖形式。对于简单的查询和数据操作,Promises 可以很简单,但是如果你遇到复杂的数据操作和其他不涉及的场景,如果代码只是 看起来 好像是同步的(换句话说,语法本身是一种“附带复杂性”的形式
async/await
可以绕过)。如果您有兴趣知道,可以使用像
co
这样的库(连同生成器)来提供相同的感觉。已经开发了这样的东西来解决async/await
最终解决(本地)的问题。