个人观点 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 等待多个异步便可以解决好多问题;可以替换好多 异步编程的包包
https://github.com/i5ting/asynchronous-flow-control
- async可以接所有async函数,这是最理想的情况
- async对于cb统统改成promise,向后兼容足够
- async利用co等来支持generator
足够用了。。。自己看看上面的文章吧
理想很丰满,现实很骨感 就算是用最优美的异步方式诞生了, npm上面成千上万的回调包也要一个一个转换过来, 除非你现在开始从头设计一种优美异步写法的高性能语言
如果用 bluebird的话,可以用promisify吧
@i5ting 搞的深啊,哈;
我还是写的太少了