Promise是ES6引入的JS中进行异步编程的新解决方案。
它是一个对象, 可以获取异步操作的消息, 它的出现大大改善了异步编程的困境, 避免了地狱回调,它比传统的解决方案回调函数和事件更合理和更强大。
Promise的实例有三个状态:Pending( 进行中)、Resolved( 已完成)、Rejected( 已拒绝)。
- // resolve 解决 函数类型的数据,对象返回成功时使用
- // reject 拒绝 函数类型的数据,对象返回失败时使用
- const p = new Promise((resolve, reject) => {
- setTimeout(() => {
- //30% 1-100 1 2 30
- //获取从1 - 100的一个随机数
- let n = rand(1, 100);
- //判断
- if(n <= 30){
- //传值,传到then中
- resolve(n); // 将 promise 对象的状态设置为 『成功』
- }else{
- reject(n); // 将 promise 对象的状态设置为 『失败』
- }
- }, 1000);
- });
-
- //then需要接收两个参数,两个参数都是函数类型,第一个函数是对象成功时的回调,第二是失败时的回调
- p.then((value) => { //接收上面异步的值
- alert('恭喜恭喜, 奖品为 10万 RMB 劳斯莱斯优惠券, 您的中奖数字为 ' + value);
- }, (reason) => {
- alert('再接再厉, 您的号码为 ' + reason);
- });
-
- });
使用 promise 封装 ajax 异步请求
- <script >
- /*
- 可复用的发 ajax 请求的函数: xhr + promise
- */
- function promiseAjax(url) {
- return new Promise((resolve, reject) => {
- const xhr = new XMLHttpRequest()
- xhr.onreadystatechange = () => {
- if (xhr.readyState !== 4) return
- const {
- status,
- response
- } = xhr
- // 请求成功, 调用 resolve(value)
- if (status >= 200 && status < 300) {
- resolve(JSON.parse(response))
- } else { // 请求失败, 调用 reject(reason)
- reject(new Error('请求失败: status: ' + status))
- }
- }
- xhr.open("GET", url)
- xhr.send()
- })
- }
- promiseAjax('https://www.app.home?code=dsfew').then(
- data => {
- console.log('显示成功数据', data)
- },
- error => {
- alert(error.message)
- }
- )
- </script>
此文章借鉴了一下博主的优秀文章万分感谢!
原文链接:https://blog.csdn.net/weixin_44106715/article/details/123934286
原文链接:https://blog.csdn.net/qq_38290251/article/details/107395152