async&await入门

加上async&await, 都算是js异步处理的第三种解决方案了(除了回调,还有promise, 和生成器&yield)
async&await感觉比较靠谱, 使用起来比较符合思路, 语义又清楚.

就是兼容性奇差, 刚试了一圈 只有新升级的chrome53 开了flags的实验特性能用…
caniuse里都没有这个词条…

例子

async&await

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function timeout(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms);
});
}
async function asyncPrint(value, ms) {
try {
await timeout(ms);//await建议返回Promise
} catch (err) {
console.log(err);//Promise结果可能是rejected
}
console.log("async==>" + value)//被异步执行
}
asyncPrint('hello world', 2000);

就是在需要异步执行的函数最开始加async, 需要阻塞的子函数前加await

Generators要写function* 然后把await换成yield.
然后自己去调next(), 结构和语义都差一点

promise需要在asyncPrint里,多写一个then()

1
2
3
timeout().then((arg) => {
//...
});

我感觉写习惯了promise倒也没什么…

typescript

试了一下typescript可以认async&await
用的Promise&then生成的新代码