对于es7 async/await 的推崇和举得例子;不知道是我理解的不够;还是例子举得混淆
发布于 7 年前 作者 slclub 3684 次浏览 来自 分享

个人观点 async /await 设计还真不咋地

如果async 是这样的语法 async function() { //异步1 setTimeout(function(){}, 0); // 异步2 setImmediate(function(){}, 0);

	// 等所有异步都执行完事,在执行的函数
	await function() {};
	// 函数内可以先执行的code  比await靠前执行
	do somethings ...
	return ;
}

很好的解决了异步编写的问题;

网上的例子 大多还结合promise使用 我想这个东西出来的目的,是为了让代码更易于理解;promise , genorator 都不是node异步 编程方式的最终解决方案,所以才出这些个新功能。我感觉这玩意有嫌弃 promise genorator 的嫌疑。 你结合这些玩意写例子,我感觉是不是 误人子弟了啊。

  • 反例1

async/Await应该是目前最简单的异步方案了,首先来看个例子。

这里我们要实现一个暂停功能,输入N毫秒,则停顿N毫秒后才继续往下执行。

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(); 控制台先输出start,稍等3秒后,输出了end。

上面这个例子我没感觉很能说明异步编程的方式; 多个 await function await function

这成了同步代码;

ES7出来个这玩意,难道还要让人们自己去实现 parellel,promise 等方式异步编程么;

我个人感觉,一个 await 等待多个异步便可以解决好多问题;可以替换好多 异步编程的包包

4 回复

https://github.com/i5ting/asynchronous-flow-control

  • async可以接所有async函数,这是最理想的情况
  • async对于cb统统改成promise,向后兼容足够
  • async利用co等来支持generator

足够用了。。。自己看看上面的文章吧

理想很丰满,现实很骨感 就算是用最优美的异步方式诞生了, npm上面成千上万的回调包也要一个一个转换过来, 除非你现在开始从头设计一种优美异步写法的高性能语言

如果用 bluebird的话,可以用promisify吧

@i5ting 搞的深啊,哈;

我还是写的太少了

回到顶部