结合之前的文章事件循环Event Loop_爬行者c的博客-CSDN博客 先理解JS异步的实现机制。
异步操作结果的处理方式一般会通过回调函数来实现。关于异步编程有以下几种。
Promise
内置类。异步编程,解决回调地域。
参数:一个函数,该函数接收两个函数参数,resolve和reject,且必传
三种状态:pending(进行中,默认状态)、fulfilled/resolved(已成功,异步操作成功后)和rejected(已失败,异步操作失败后)
注:
- 状态一旦修改就不能再改变,一旦执行就无法取消。pending-->resolved/rejected
- then方法的参数期望是函数,传入非函数则会发生值穿透。
- then异步执行,支持链式写法。
let promise = new Promise((resolve, reject) => {
if (true) {
// 将成功参数返回,供then方法使用
resolve("value");
} else {
// 将失败参数返回,供then方法使用
reject("error");
}
});
// then 方法接收两个函数作为参数,第一个参数是 Promise 执行成功时的回调,第二个参数是 Promise 执行失败时的回调,两个函数只会有一个被调用。
promise.then(
value => {
// resolved时调用,value为resolve函数返回的参数
console.log(value);
},
err => {
// rejected时调用,err为reject函数返回的参数
console.log(err);
}
);
promise.catch(error => console.log(error)); //捕获错误
原型上的公有方法
Promise.prototype.then()
Promise.prototype.catch()
Promise.prototype.finally()
new Promise().then(res=>{}).catch(err=>{})
静态方法
Promise.resolve('a')
Promise.reject('a')
Promise.all([p1,p2,p3]]); //所有promise实例都为成功状态 返回值:新的Promise实例
Promise.race([p1,p2,p3]]); //同时发送多个请求,谁先有处理结果就返回,不管是成功还是失败(‘竞速’)
Generator函数
异步。分段执行。yield暂停执行