1、Promise对象:代表了未来某个将要发生的事件(通常是一个异步操作),一般是结合ajax;
2、有了promise对象,可以将异步操作以同步的流程表达出来,避免了层层嵌套的回调函数(俗称"回调地狱");
ES6的Promise是一个构造函数,用来生成promise实例;
Promise对象的三种状态:
- pending:初始化状态
- fullfilled:成功状态
- rejected:失败状态
Promise对象 使用
<script>
// 实例化 得到promise对象 new Promise((resolve,reject){})
// resolve:更改成功的状态(将Promise对象的状态从“未完成”变为“成功”,即从pending 变为 resolved)
// reject:更改失败的状态(将Promise对象的状态从“未完成”变为“失败”,即从pending 变为 rejected)
let promise = new Promise((resolve,reject)=>{
});
//
promise.then();
</script>
Promise对象 处理异步的操作
1)聚合平台:注册实名认证(个人认证)—> 到首页查找需要的api接口文档—>进行添加—>后台我的接口里面查找刚刚添加的接口
2)
ajax 格式:
$.ajax({
url: // 交互地址
type: // 以声明方式提交 get / post
async: 默认是以异步请求 async : false 同步请求 (不设置参数,默认是异步请求)
dataType:"" // 交互格式 json jsonp xml
data:{}
success:function(res){}
})
<script>
function newpage(url){
// 实例化得到Promise对象
let promise = new Promise((resolve,reject)=>{
// 以ajax获取接口
$.ajax({
url:url,
type:'get',
dataType:'jsonp',
data:{
'sort': 'desc',
'time': '1418816972',
'key': '72214f2e7b785a3a138d232e6112f070',
},
success:function(res){
console.log(res);
resolve(res.result.data); // 更改数据状态
}
})
});
return promise; // 返回promise对象
}
let ceshi = newpage('http://v.juhe.cn/joke/content/list.php');
console.log(ceshi); // promise Promise{<state>:"pending"}
ceshi.then((data)=>{
console.log(data); // Array20 [ {...},{...},{...},{...},{...},{...},{...},{...},{...},{...},... ]
for(x in data){
document.write(data[x].content+'<br>');
}
})
</script>
流程:
- 实例化得到Promise对象
- 用ajax接受数据
- 更新状态
- then(data) // data接收到数据
- 循环输出内容到页面中显示