当前位置: 首页 > news >正文

ES6中的Promise

Promise 是一种异步编程解决方案,Promise是一个容器,保存着将来才会执行的代码;从语法角度来说Promise是一个对象,可以用来获取异步操作的消息。异步操作,同步解决,避免了层层嵌套的回调函数,可以链式调用降低了操作难度

Promise构造函数接收一个函数作为参数,也就是回调函数;该函数的两个参数分别是resolve和reject。resolve作为成功的回调函数,reject作为失败的回调函数。Promise对象代表一个异步操作有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。最后返回resolved(已定型)结果。

 let p1=new Promise((resolve,reject)=>{if(3>2){resolve('success')}else{reject('error')}})p1.then((res)=>{console.log(res,'成功回调')}).catch((error)=>{console.log(error,'失败回调')}).finally(()=>{console.log('最终执行')})p1.then((res)=>{console.log(res,'成功')},(err)=>{console.log(res,'失败')});

静态方法 只能由构造函数本身去调用

定义在Promise中的方法,通过Promise可以直接调用

Promise.all([p1,p2])

参数:数组,数组中的元素为Promise实例

返回值:Promise实例,当p1,p2状态都为fulfilled时候,该实例的状态才为fulfilled,此时p1,p2的返回值组成一个数组,传递给该实例的回调函数;只要p1,p2的返回值有一个变为rejected,该实例状态为rejected;

Promise.race([p1,p2]) 赛跑返回先请求成功的实例

参数:数组,数组中的元素为Promise实例 返回值:Promise实例,当p1,p2之中有一个实例率先改变状态,该实例的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给该实例的回调函数。

Promise.any([p1,p2]) 参数:数组,数组中的元素为Promise实例 返回值:Promise实例,只要p1,p2状态有一个变为fulfilled,该实例的状态为fulfilled;p1,p2状态都变为rejected,该实例状态才为rejected

function promise(url) {return new Promise((resolve, reject) => {let xhr = new XMLHttpRequest();xhr.open('get', url);xhr.send();xhr.onreadystatechange = function () {if (xhr.readyState === 4) {if (xhr.status === 200) {resolve(xhr.responseText)} else {reject(xhr.responseText)}}}})}let p1=getPromise('http://121.199.0.35:8888/index/article/findCategoryArticles');let p2=getPromise('http://121.199.0.35:8888/index/carousel/findAll');let p=Promise.any([p1,p2]);p.then((res)=>{console.log(res)}).catch((err)=>{console.log(err)})
setTimeout(function () {console.log('1');
})
new Promise(function (resolve) {console.log('2');resolve();
}).then(function () {console.log('3');
})
console.log('4');async function async1() {console.log(1);const result = await async2();console.log(3);
}
async function async2() {console.log(2);
}
Promise.resolve().then(() => {console.log(4);
});
setTimeout(() => {console.log(5);
});
async1();
console.log(6);

http://www.lryc.cn/news/256717.html

相关文章:

  • 载入了名字空间‘htmltools’ 0.5.6,但需要的是>= 0.5.7解决方案
  • Cisco 思科路由交换网络设备 安全基线 安全加固操作
  • WPF仿网易云搭建笔记(0):项目搭建
  • Python爬虫利器:BeautifulSoup库详解
  • 【链表Linked List】力扣-117 填充每个节点的下一个右侧节点指针II
  • 安卓adb【备忘录】
  • Linux笔记之删除指定目录下除最新修改的以 .pack 为扩展名的文件之外的所有文件
  • 什么是呼叫中心的语音通道?呼叫中心语音线路有几种?
  • 3D点云:平面模型上提取凸(凹)多边形方法
  • 论文笔记--A Fine-grained Interpretability Evaluation Benchmark for Neural NLP
  • NFC和蓝牙在物联网中有什么意义?如何选择?
  • 代码随想录二刷 |二叉树 | 二叉树的最小深度
  • 云上守沪 | 云轴科技ZStack成功实践精选(上海)
  • 2023 IoTDB 用户大会成功举办,深入洞察工业互联网数据价值
  • cache教程 3.HTTP服务器
  • redis应用-分布式锁
  • 51单片机程序
  • Android 分享小结
  • Ubunutu18.04 ROS melodic 无人机 XTDrone PX4 仿真平台配置
  • JVM 命令行监控及诊断工具
  • 飞天使-linux操作的一些技巧与知识点2
  • Android : 篮球记分器app _简单应用
  • 音视频之旅 - 基础知识
  • 分类预测 | SSA-HKELM-Adaboost麻雀算法优化混合核极限学习机的数据分类预测
  • 如何使用 Zotero 导出所选条目的 PDF 文件
  • minio的k8s的单机部署
  • Git 更改remote repo 地址
  • 24、文件上传漏洞——Apache文件解析漏洞
  • 使用Go快速开发TCP公共服务
  • QEMU环境调试方法