不管是使用还是面试,Promise都是一整个重点,下面来总结下Promise和Async Await。
先看下常见的异步操作:
事件监听:
document.getElementById('#start').addEventListener('click', start, false);
function start() {
// 响应事件,进行相应的操作
}
// jquery on 监听
$('#start').on('click', start)
回调
// 比较常见的有ajax
$.ajax('http://www.wyunfei.com/', {
success (res) {
// 这里可以监听res返回的数据做回调逻辑的处理
}
})
// 或者在页面加载完毕后回调
$(function() {
// 页面结构加载完成,做回调逻辑处理
})
(1)Promise
Promise主要用于异步任务,将异步的任务队列化,他主要解决了异步操作不小心就会进入回调地狱模式中,他将回调地狱的嵌套模式改为了链式调用模式,利于代码可读性和维护性。
promise代码:
new Promise(
function (resolve, reject) {
// 一段耗时的异步操作
resolve('成功') // 数据处理完成
// reject('失败') // 数据处理出错
}
).then(
(res) => {
console.log(res)}, // 成功
(err) => {
console.log(err)} // 失败
)
(1)resolve作用是将promise对象状态从未完成变为成功,异步操作成功时调用,并将异步操作的结果作为参数传出去。
reject的作用是,将promise的状态从未完成变为失败,在异步操作失败时调用,并将异步操作报的错作为参数传递出去
(2)promise有三个状态:pending初始状态,fulfilled操作成功,rejected操作失败状态
(3)promise的状态一经改变,只有两种可能:从pending变为fulfilled,