js中的async与await
前期项目中用到了es7中的async和await,也来总结下自己的理解吧。
一、是什么
async表示异步,而await可以看作async wait。个人对async与await的简单理解就是,我们可以用同步的方式去书写异步代码。当然,这也都是基于promise的。
二、比对
提到异步,不得不提到promise,因此,我们来对比下两者写法的区别。
promise
一个很简单的例子,
new Promise(function(resolve, reject) {
resolve(11);
}).then(function(data) {
console.log(data);
}).then(function() {
console.log('hiiii');
});
如果用await或者async该如何写呢?
await/async
function getA() {
return new Promise(function(resolve) {
resolve(11);
});
}
function getB() {
return new Promise(function(resolve) {
resolve('hiiii');
});
}
(async function () {
let data = await getA(),
dataB = await getB();
console.log(data, dataB);
})();
乍一看,用async的改写后,代码量还上升了,但在实际调用的函数内部时,关系很明显,不像promise嵌套,不太容易看清。
三、简单使用
首先,async只能用于函数上,表明这是一个async函数,而await只能在被声明为async的函数内部使用。
还是刚才那个例子,当执行到 await getA()时,会先等待getA执行完成后,才会向下执行,而执行到await getB()时也是如此。
其他详细的可以查看:http://www.ruanyifeng.com/blog/2015/05/async.html。