网站开发要点,做债的网站,深圳网站建设 响应式设计开发,做科技的网站为什么需要使用 Promise #xff1f; 传统回调函数的代码层层嵌套#xff0c;形成回调地狱#xff0c;难以阅读和维护#xff0c;为了解决回调地狱的问题#xff0c;诞生了 Promise 什么是 Promise #xff1f; Promise 是一种异步编程的解决方案#xff0c;本身是一个构… 为什么需要使用 Promise 传统回调函数的代码层层嵌套形成回调地狱难以阅读和维护为了解决回调地狱的问题诞生了 Promise 什么是 Promise Promise 是一种异步编程的解决方案本身是一个构造函数
console.log(Promise); // [Function: Promise]自带resolverejectall 等方法其原型上还有then、catch等方法。 Promise 的三种状态及其变化 pending 进行中不会触发 then 和 catch 回调函数resolved / fulfilled 已成功会触发后续的 then 回调函数rejected 已失败会触发后续的 catch 回调函数
Promise 的状态变化如上图所示不可逆 Promise 最初的状态是 pending pending 状态的 Promise 执行 resolve() 后状态变为 resolved Promise.resolve(); // Promise 的状态从 pending 变为 resolvedresolved 状态的 Promise 会触发后续的 then 函数 若 then 函数内没有报错则返回一个 resolved 状态的 Promise Promise.resolve().then(() {}); // 最终 Promise 的状态为 resolved若 then 函数内报错则返回一个 rejected 状态的 Promise Promise.resolve().then(() {throw new Error(then函数出现报错);
}); // 最终 Promise 的状态为 rejectedpending 状态的 Promise 执行 reject() 后状态变为 rejected Promise.reject(); // Promise 的状态从 pending 变为 rejectedrejected 状态的 Promise 会触发后续的 catch 函数 若 catch 函数内没有报错则返回一个 resolved 状态的 Promise Promise.reject().catch(() {}); // 最终 Promise 的状态为 resolved若 catch 函数内报错则返回一个 rejected 状态的 Promise Promise.reject().catch(() {throw new Error(catch函数出现报错);
}); // 最终 Promise 的状态为 rejectedPromise 自测题 此时仅创建了 Promise 对象没有执行 resolve() 或 reject()所以状态是 pending 因 setTimeout 是异步任务内部代码在打印完 p2 后才执行所以在打印 p2 时Promise 还没执行 resolve() 状态是 pending。打印完 p2 后setTimeout 内的 resolve() 执行Promise 的状态变为 resolved