前言: javaScript是单线程的语言,一次只能进行一个任务,当前任务完成后进行下一个任务,多任务需要排队执行。但当任务增多,其中一。 个任务卡死,就会使浏览器也卡死。为此,JavaScript中的任务执行模式分为同步与异步。
同步任务: 单线程模式,前一个任务执行完成之后,才开始执行后一个任务,按照任务的排列顺序执行。
异步任务: 执行前一个任务时,不等此任务返回结果,为此任务设置一个处理代码,当此任务返回结果时,使用预先设置的处理代码处理返回结果。等待结果的同时,浏览器处理下一个任务。比如Ajax操作
前端异步解决方案
- 回调函数(callback): 函数A作为参数传递到函数B中,函数B执行函数A,函数A叫做回调函数。
- 事件监听: 任务的执行在于某事件是否发生
Promise(异步编程的一种解决方案): Promise对象用于对异步操作的最终结果的表示,用于处理异步操作,最终结果成功了就执行成功了的操作,失败了就执行失败了的操作。
new Promise(
function(resolve, reject) {
if (/* success */) {
// ...执行代码
resolve();
} else { /* fail */
// ...执行代码
reject();
}
}
);
调用resolve方法,Promise变为操作成功状态(fulfilled),调用reject方法后,Promise状态变为rejected,即操作失败状态
Promise对象的部分方法
- Promise.prototype.then(callback):Promise对象含有then方法,then()调用后返回一个Promise对象,意味着实例化后的Promise对象可以进行链式调用,而且这个then()方法可以接收两个函数,一个是处理成功后的函数,一个是处理错误结果的函数。
- Promise.prototype.catch(callback):catch()方法和then()方法一样,都会返回一个新的Promise对象,它主要用于捕获异步操作时出现的异常。