我已经在移动应用程序和Web应用程序中使用了ECMAScript 6和ECMAScript 7功能(由于Babel)。
第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。
这是我如何实现基本诺言的示例/伪代码-
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,await函数的伪代码,如下所示:
async function myAsyncFunction (myObj) {
var x = new MyDataStore(myObj);
return await x.init();
}
var returnVal = await myAsyncFunction(obj);
撇开语法错误(如果有的话),我感觉都是一样。我几乎可以用异步唤醒来代替我的大部分诺言。
为什么诺言做类似的工作时需要异步等待?
异步等待解决更大的问题吗?还是只是针对回调地狱的另一种解决方案?
如前所述,我能够使用promise和async,等待解决相同的问题。异步等待解决了什么具体问题?
补充说明:
我已经在我的React项目和Node.js模块中广泛使用异步,唤醒和承诺。React特别是早起的鸟儿,并采用了许多ECMAScript 6和ECMAScript 7功能。
全面比较优缺点。
纯JavaScript
异步(库)
承诺
发电机
异步等待