Promise基本使用 ,promise 与 Ajax封装
Promise
是JS中进行异步编程的新的解决方案
表达:
①从语法上看:Promise
是一个构造函数 (自己身上有all
、reject
、resolve
这几个方法,原型上有then
、catch
等方法)
②从功能上看:promise
对象用来封装一个异步操作并可以获取其成功/失败的结果值
<button id="btn">点击事件</button>
<script>
// 生成随机数
function rand(m,n){
return Math.ceil(Math.random()*(n-m+1)) + m-1;
}
const btn= document.querySelector("#btn")
btn.addEventListener('click',function(){//添加点击事件
//
Promise
构造函数接受一个函数(执行器函数)作为参数,//该函数的两个参数分别是
resolve
和reject
。const p = new Promise((resove,reject)=>{
setTimeout(()=>{ //包裹一个异步操作
let n = rand(1,100);
if(n<=30){
resove()
//
resolve
函数的作用是,将Promise
对象的状态从“未完成”变为“成功”//(即从
pending
变为resolved
),在异步操作成功时调用,并将异步操作的结果,// 作为参数
value
传递出去;}
else{
reject()
//
reject
函数的作用是,将Promise
对象的状态从“未完成”变为“失败”//(即从
pending
变为rejected
),在异步操作失败时调用,并将异步操作报出的错误//,作为参数
error
/reason
传递出去。}
},1000)
})
//
Promise
实例生成以后,可以用then
方法分别指定resolved
状态和rejected
状态的回调函数。p.then(()=>{
alert('成功了')
},()=>{
alert('失败了')
})
})
//then方法可以接受两个回调函数作为参数。
//第一个回调函数onResolved()是Promise对象的状态变为resolved时调用
//第二个回调函数onRejected()是Promise对象的状态变为rejected时调用
//这两个函数都是可选的,不一定要提供。它们都接受Promise对象传出的值作为参数</script>
promise 与 Ajax封装
<div>promise 与 Ajax封装</div>
<script>function sentAjax(url,data){return(new Promise((resolve,reject)=>{// resolve(1)let xhr = new XMLHttpRequest()xhr.onreadystatechange =()=>{if(xhr.readyState === 4){if(xhr.status >= 200 && xhr.status<300){resolve(xhr.response)}else{reject('出错了')}}}// 整理url中的参数let str='' for(key in data){str += `${key}=${data[key]}`}xhr.open('GET',url+'?'+ str)xhr.responseType="json"xhr.send()}).then((value)=>{console.log('成功了',value)},(reason)=>{console.log(reason)}))}sentAjax('https://api.github.com/search/users',{q:2})
</script>
Promise 的状态, promise 指定多个成功/失败回调函数,都会调用吗?_Allen 赵奇隆的博客-CSDN博客
Promise基本使用 ,promise 与 Ajax封装相关推荐
- Promise 的基本使用 与 Ajax的jQuery封装
Promise 的基本使用 为了解决回调地狱问题,从而给出的解决办法: /*** Promise** 1. Promise 是 一个构造函数 new Vue()* 2. Promise() 里面有个参 ...
- Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
这篇文章主要介绍了用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案),需要的朋友可以参考下 问题 前端小同学在做页面的时候,犯了个常见的错误:把多个Ajax请求顺序着写下来了, ...
- Vue之Axios AJAX封装
来源:我的博客站 OceanicKang |<Vue 之 Axios AJAX封装> 前言 才不要写前言,Axios 中文文档 https://www.kancloud.cn/yunye/ ...
- js之- 简解Promise的resolved,rejected,Promise.all 和Promise.race(知识记录)
1- Promise的三种状态: 1- Pending(等待,未完成,进行中) 2- Resolved(成功) 3- Rejected(失败) 2- Promise的三种状态关系变化只有两种: 1- ...
- jQuery的ajax封装函数
阐述: 在开发的时候,我们会频繁调ajax,但是jQuery又不能使用promise,不遵循ES6的标准.所以很烦. 只能靠自己封装一下ajax来解决下ajax频繁写的过程.也便于日后维护. 封装aj ...
- 【ES6】什么是Promise?解析Promise的基本用法
Promise介绍 Promise 是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise ...
- 如何将小程序内置非promise API转换为promise对象(风袖小程序的学习)
非常重要,便于项目大局观,使用es7的 async和await 如何将小程序内置非promise API转换为promise 这里是我封装的一个wx.request函数如何将wx.request转换成 ...
- Promise: 手写Promise
前言 ES6里的Promise是个原理性蛮复杂但是使用起来很简单的异步解决方案.我们有必要系统.深入的学习Promise的使用规则,并能根据规则手动实现一个完整的Promise,下面我们就根据官方的规 ...
- promise的优点promise.all(),promise.race(),promise.allSettled()的原理
Promise也是使用回调函数,只不过是把回调封装在了内部,使用上一直通过 then 方法的链式调用,使得多层的回调嵌套看起来变成了同一层的,书写上以及理解上会更直观和简洁一些.Promise出现之前 ...
最新文章
- NetLogo入门(二)——模型基本语法
- 研究型AI面经 | 来自一位Reddit网友谷歌面试经验分享
- MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength
- c语言随机产生arp报文,c语言构造arp报文
- php设计模式的六大原则(六):迪米特法则
- TCP文件上传Java_java 基于TCP协议的文件上传
- android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...
- 图解 Linux 安装 JDK1.8 、配置环境变量
- 带你了解极具弹性的Spark架构的原理
- C# 窗口大小及屏幕分辨率操作
- Linux篇:Shell脚本实现Gitlab双备份
- ANDROID常用的命令(转载,后续自己完善)
- java发牌_Java实现洗牌发牌的方法
- 腾讯位置服务开发应用-使用教程,案例分享,知识总结
- python 欧姆龙plc通信_电脑与欧姆龙plc通过网络通信
- oracle 查询本年12月,Oracle查询1-12月数据
- 游戏道具平台|基于Springboot+Vue实现游戏道具平台系统
- 如何下载顺义区卫星地图高清版大图
- java1.7.0 for linux_linux操作系统-安装jdk1.7
- 洗牌程序c语言原理,C语言经典算法 - 洗牌算法
热门文章
- LAZADA店铺运营分享:lazada后台有没有数据分析?生意参谋如何使用!
- 编译PHP的windows版本
- 变量——整型变量 浮点型变量 字符型变量
- 炸了!中科大26岁数学家攻克世界难题!12岁读高中,14岁考入中科大少年班.......
- 税后 4W?美女HR?程序员小心了,你可能入了 “东南亚博彩骗局”
- Unity开发备忘录000028:Bolt无代码做游戏——控制角色行走
- 软件销售合同争议仲裁案裁决书
- 问题集锦:SwitchResX自定义分辨率可能遇到的问题以及解决办法
- 查询oracle表空间是否满了,查看Oracle表空间大小的方法
- jqweui组件,confirm嵌套prompt后调用一个方法中的alert无法关闭掉