概述
Promise简介
Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大。ES6将其写进了语言标准,统一了语法,里面保存着某个未来才回结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息,代码十分简洁易读没有复杂的花括号嵌套,把异步代码写成同步的感觉。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="jquery.js" charset="utf-8"></script>
<script>
Promise.all([
$.ajax({url: 'data/1.txt', dataType: 'json'}),
$.ajax({url: 'data/2.txt', dataType: 'json'}),
$.ajax({url: 'data/3.txt', dataType: 'json'})
]).then(arr=>{
let [data1, data2, data3]=arr; //结构赋值
console.log(data1, data2, data3);
}, ()=>{
alert('失败了');
});
</script>
</head>
<body>
</body>
</html>
Promise特点:
- 它有三种状态:Pending(进行中)Resolved(已完成)Rejected(失败)
- 一旦建立,就无法取消。这是它的缺点。
基本写法:
//模拟成功
let flag=true;
let p=new Promise ((resolve,reject)=>{
if(flag){
resolve('success')
}else{
reject('error')
}
})
p.then(res->console.log(res),error=>console.log(error))
输出 success
//这里我们不推荐在then中的第二参数传入error的回调,而是用catch代替:
//模拟失败
let flag=false;
let p=new Promise ((resolve,reject)=>{
if(flag){
resolve('success')
}else{
reject('error')
}
})
p.then(res->console.log(res))
.catch(error=>console.log(error))
Promise.race([…promise])
-
只要有一个promise的状态发生改变,Promise.race就返回状态。
let p1=new Promise ((resolve.,rejece)=>{ setTimeout(() => { resolve('step one'); }, 1000); }) let p2 = new Promise((resolve, reject) => { setTimeout(() => { resolve('step two'); }, 500); }); let p = Promise.race([p1, p2]); p.then((res) => console.log(res)) .catch((error) => console.log(error)); //输出 step two
简单的一个应用 先处理下载任务 再处理保存任务(这里我就用setTimeout模拟了)
let down=(reslive,reject)=>{
setTimeout(()=> {
resolve('下载任务处理完成');
}, 1000);
}
let save = (resolve, reject) => {
setTimeout(() => {
resolve('文件保存完成');
}, 500);
}
let p=()=>{
new Promise(down).then(res=>{
console.log(res);
return new Promise(save)
})
.then(res=>console,log(res))
.catch(err=>console.log(err))
}
p();
一定要注意promise一旦建立,立即执行。
以上是看到的一些好的博客文章整理成了这些,为了以后能更好的使用和理解Promise
最后
以上就是昏睡电源为你收集整理的promise请求数据用法的全部内容,希望文章能够帮你解决promise请求数据用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复