async搭配await是ES7提出的,它的实现是基于Promise。这里使用它对比Promise的用法,这里只是简单的适合日常业务的使用场景。async、await是ES7中的提案,通过同步方式的写法,使得代码更容易阅读。
注意:await函数不能单独使用,而且async函数返回的是一个Promise对象,可以使用then函数添加回调函数。当函数执行的时候,一旦遇到await函数就会先返回一个Promise对象,等到异步操作完成,再去执行后面的语句。如果 await 后面的异步操作出错,那么等同于 async 函数返回的 Promise 对象被 reject!
Promise是ES6的新特性,用于处理异步操作逻辑,用过给Promise添加then和catch函数,处理成功和失败的情况,下面就两种情况介绍异步,刚刚入门把自己的理解写出来沉淀一下。
function timeout(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
// 调用函数
async function asyncPrint(value, ms) {
await timeout(ms);
console.log(value);
}
// 调用函数
asyncPrint('timeout', 2000); // 2s之后打印出'timeout',如果不相信可以使用vscode编辑器的run code插件,会把执行时间展示给你!
下面是Promise的实现同样的功能
function timeout1(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
// 因为上面函数返回是的Promise对象,所以直接使用链式方法then时,是在Promise对象内的函数执行完之后执行的,这样就可以达到上面同样的结果
timeout1(5000).then(() => {
console.log('timeout1'); // 5s之后打印出'timeout1'
})
网友评论