promise中调用ajax
Promise是异步里面的一种解决方案,解决了回调嵌套的问题,es6将其进行了语言标准,同意了用法,提供了`promise`对象, promise对象有三种状态:pending(进行中) 、Resolved(已经完成)和Rejected(已失败)
ES6规定,Promise对象是一个构造函数,用来生成Promise实例。
1
2
3
4
5
6
7
|
var promise= new Promise( function (resove,reject){
if ( /* 异步操作成功 */ ){
resolve(value);
} else {
reject(error);
}
})
|
Promise实例生成以后,可以用then
方法分别指定Resolved
状态和Reject
状态的回调函数。
1
2
3
4
5
|
promise.then( function (value) {
// success
}, function (error) {
// failure
});
|
案例
1
2
3
4
5
6
7
|
var promise= new Promise( function (resolve,reject){
console.log( 'promise' );
})
promise.then( function (){
console.log( '我后执行' )
})
console.log( '我先执行' )<br><br> //上面代码中,Promise新建后立即执行,所以首先输出的是“Promise”。然后,<code>then</code>方法指定的回调函数,<br>//将在当前脚本所有同步任务执行完才会执行,所以“我后执行” 最后输出。
|
ajax
var
http = {
get:
function
(url) {
var
promise =
new
Promise(
function
(resolve, reject) {
$.ajax({
url: url,
method:
'get'
,
success:
function
(data) {
resolve(data);
},
error:
function
(xhr, statusText) {
reject(statusText);
}
});
});
return
promise;
}
};
http.get(
'solve.php'
).then(
function
(data) {
return
data;
},
function
(err) {
return
Promise.reject(
'Sorry, file not Found.'
);
}).then(
function
(data) {
document.write(data);
},
function
(err) {
document.write(err);
});
Promise三种状态
pending、resolved、rejected
使用语法
var promis = new Promise(function(resolve,reject){ $.ajax({ url:'/api/something.json', method:'get', datatype:'json', success:(res) =>{ resolve(res) }, error:(err)=>{ reject(err) } }) }) promis.then(function(res){ console.log(res) }).catch(function(err){ console.log(err) });
Promise.prototype.then()
链式调用,状态变为resolve
如果把下一步想要的东西return出去,即可让下一个then使用
var promise = new Promise(function(resolve,reject){ $.ajax({ url:'/api/poisearch.json', method:'get', datatype:'json', success:(res) =>{ resolve(res) }, error:(err)=>{ reject(err) } }) }) promise.then(function(res){ return res.data }).then(function(data){ return data.result; }).then(function(result){ console.log(result) });
上面的代码还可以借用箭头函数简写成,极大提升了代码的简洁性和可读性
promise.then(res => res.data).then(data => data.result) .then(result => console.log(result));
Promise.prototype.catch()
如果异步操作抛出错误,状态就会变为Rejected,就会调用catch方法指定的回调函数,处理这个错误。
- 另外,then方法指定的回调函数,如果运行中抛出错误,也会被catch方法捕获。
- 如果Promise状态已经变成Resolved,再抛出错误是无效的。
- catch方法返回的还是一个Promise对象,因此后面还可以接着调用then方法。
promise中调用ajax相关推荐
- chrome插件中调用ajax,Chrome扩展程序中的Ajax调用无效
尝试在Chrome扩展程序中发送ajax请求.我已经确认请求返回200响应,它应该只是console.log来测试'.我不确定这里是否存在异常问题?我已经阅读了Chrome扩展程序' addListe ...
- 在微信中调用ajax出现的问题
问题:微信中弹出这个 分析:现XMLHttpRequest.status等于0,XMLHttpRequest.readyState等于0,说明窗体中有XMLHttpRequest对象却没有初始化,接下 ...
- 使用fetch封装ajax_如何使用Fetch在JavaScript中进行AJAX调用
使用fetch封装ajax I will be sharing bite sized learnings about JavaScript regularly in this series. We'l ...
- javascript-前后端交互-异步调用Ajax与Promise比较
javascript-前后端交互-异步调用Ajax与Promise比较 目录 文章目录 1.异步调用 1.1.使用场景 1.2.Ajax使用 1.2.1.启动后台 1.2.2.编写前端测试页面 1.3 ...
- php变量在html调用函数调用,PHP_如何在html标记中调用的函数里传递对象,最近使用jquery结合Ajax开发一个 - phpStudy...
如何在html标记中调用的函数里传递对象 最近使用jquery结合Ajax开发一个中小型网站应用.在后台管理中要使用Ajax调用系统功能,根据Ajax的返回结果,使用jQuery对前台页面进行操作. ...
- ajax远程调用,jquery中的ajax方法怎样通过JSONP进行远程调用
关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/ ...
- jquery ajax循环调用,每个循环jQuery中的Ajax调用
这是一个函数,我必须通过ajax调用写入一个xml文件.该代码在第一次进行ajax调用时工作正常.在每个循环的第二个循环中,ajax调用完全没有进行.我不知道为什么.我指定asyn为false.这没有 ...
- 为什么要用promise处理ajax,用promise.all解决ajax异步循环请求问题
Promise.all() 并不能解决循环的问题,一般情况下 .all() 的参数是 Promise 数组(暂时不考虑其它类似).那么,数组中的每个 Promise 都代表着一个异步操作,Promis ...
- React基础-React中发送Ajax请求以及Mock数据
前言 在 React 中, render 函数返回的结果,取决于组件的 props 和 state 我们都知道 UI 页面上的数据不是写死的,往往是从后端的数据接口中拿到的 然后将真实的数据填充到页面 ...
最新文章
- GNU/Linux平台上正则表达式的简单使用
- [C++对象模型][8]多重继承与虚函数表
- python flask 如何修改默认端口号
- SpringBoot_配置-外部配置加载顺序
- Spring请求级备忘录
- 【JAVA基础篇】抽象类和接口的区别
- ubuntu7.10中的apache的一些设置
- 加速包可能没用!12306屏蔽多个抢票软件
- yuv格式转换是那个组织定义的_YUV格式
- 不要进行过度设计,某一层存在真的有意义吗?是否可以更简单。
- VS中编辑器显示行号
- Android数据库框架LitePal详解
- 大数据集群安装02之Hadoop配置
- 2018-2019-1 20165318 20165322 20165326 实验二 固件程序设计
- 人体反应测试仪 c语言,有趣的人体反应速度测试电路
- 2021“智荟杯”浦发百度高校极客挑战赛——比赛总结
- 吴军推荐给中学生的书单
- 给Scrapy添加代理
- 在aws亚马逊云EC2上创建root用户,并使用root用户登录
- CSS复合选择器,元素的显示模式,CSS背景设置
热门文章
- 【简便解法】1077 互评成绩计算 (20分)_32行代码AC
- 1.7 ConcurrentHashMap增删改查
- php 根据坐标计算范围内,php计算经纬度是否在区域内
- java 捕获特定异常_java – 使用特定消息捕获异常
- python累加求和_python中的变量和数据类型(一)
- 华为交换机配置Telnet步骤
- 路由交换以及其他网络名词基本概念
- STM32 CAN过滤器
- Tomcat中session的管理机制
- 虚拟机上部署的项目 访问路径怎么写_桌面虚拟化即将流行开来——基于Hyper-V虚拟机的桌面虚拟化部署...