JS中的Promise和async await
单线程的js为什么会出现异步操作
JS的执行环境是单线程的,但是这样的单线程会导致如果程序执行过程中,某一步需要耗时很长就会导致整个页面卡住,为了避免这种问题,JavaScript语言将任务的执行模式分为两种:同步(Synchronous)和异步(Asynchronous)
同步:就是一行一行从上往下执行
异步:前一个任务执行完成后执行回调函数,而下一个任务则是再前一个任务执行完成后就开始了
JavaScript中异步编程的方法有:
- 回调函数
- 事件监听
- 发布/订阅
- promise
- generator(ES6)
- async/await (ES7)
Promise的用法
// 创建一个Promise对象
let a = new Promise( function(resolve(), reject()) {
// 正常返回
resolve(data)
// 异常返回
reject(e)
} /* executor */ );
// 通过then获取resolve()方法中的参数,catch接受reject中的参数
a.then(data => {console.log(data)}).catch(e => {
console.log(e)
})
async await的用法
await 关键字只能在 async修饰的方法中使用
/**
* readFile是一个触发异步的方法,先要在read文件之后获取到文件内容
*/
async function() {
let str = await readFile("./a.txt")
if(str){
let fr2 = await readFile(str)
if(fr2){
console.log(fr2)
}
}
}