一、promise函数是干什么的

promise函数是解决异步编程调用代码逻辑编写过于复杂的问题的,当网络请求非常复杂时,就会出现回调地狱,这样如果将这些代码写在一起就会看起来很复杂,且不利于阅读,如果用promise的话就会让代码看起来更加美观优雅

二、Promise三种状态

首先, 当我们开发中有异步操作时, 就可以给异步操作包装一个Promise
异步操作之后会有三种状态

pending:等待状态,比如正在进行网络请求,或者定时器没有到时间。
fulfill:满足状态,当我们主动回调了resolve时,就处于该状态,并且会回调.then()
reject:拒绝状态,当我们主动回调了reject时,就处于该状态,并且会回调.catch()

三、实现方法

 //参数 函数(resolve,reject)
new Promise((resolve, reject) => {
setTimeout(() => {
//请求成功的时候调用resolve
resolve('22222')
//请求失败的时候调用reject
reject('error message')
}, 1000)
}).then((data) => { //请求成功处理函数
console.log(data)
}).catch((err) => { //请求失败处理函数
console.log(err)
})

四、链式调用

new Promise ((resolve,reject) => {
setTimeout(() => {
resolve('aaa')
},1000)
}).then (res => {
//自己处理代码
console.log(res) //对结果进行第一次处理
return new Promise((resole) => {
resole(res + '111')
})
}).then (res => {
//第二层代码
console.log(res)
//对结果进行第二次处理
return Promise.resolve(res + '222') //可以这样简写
}).then(res => {
console.log(res)
})

五、promise all方法

有时候我们需要等待两个或者多个请求都成功返回了再进行下一步操作,promise 的all方法是等所有的异步请求完成之后在进行下一步回调

Promise.all([
new Promise((resolve,reject) => {
$ajax({
url: 'url1',
success: function (data) {
resolve(data)
}
})
}),
new Promise((resolve,reject) => {
$ajax({
url: 'url2',
success: function (data) {
resolve(data)
}
})
})
]).then(results => {
console.log(results) //返回得results是一个数组
})

最新文章

  1. 几个有趣的WEB设备API(二)
  2. php多进程总结
  3. 【Avalon源码】iterator
  4. ahjesus ubuntu10.4安装ruby2.1.1
  5. 5.7 WebDriver API实例讲解
  6. 【转】Java集合框架综述
  7. 基于session的简易购物车引发的问题
  8. 最新仿梦芭莎免费ecshop模板
  9. MySQL复制(三) --- 高可用性和复制
  10. 托盘图标、气泡以及任务栏崩溃后的自动添加——Shell_NotifyIcon
  11. 《UNIX环境高级编程》笔记--sigaction函数
  12. 怎样获得PRINCE2证书?报名PRINCE2有什么条件?
  13. Java集合源代码剖析(二)【HashMap、Hashtable】
  14. linux java 和jmeter 环境变量配置文件笔记(原)
  15. 修改已有git仓库的远程仓库指向
  16. VoiceXML标识元素及其属性
  17. node设置跨域
  18. Qt 编程指南 3_1 按钮弹窗手动和自动关联示例
  19. php -- 正则替换
  20. 关于spark standalone模式下的executor问题

热门文章

  1. flask-script实现自动刷新页面调试
  2. (转)Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
  3. POJ 1066 Treasure Hunt [想法题]
  4. Python web自动化测试框架搭建(功能&接口)——unittest介绍
  5. mysql 5.1.34
  6. Java中的基本类型和包装类型区别
  7. [CodeForces 52C]Circular RMQ
  8. CSS动画划入划出酷炫
  9. 61-python基础-python3-格式化浮点数方法-%e、%f、%g
  10. vmware 15安装centos 7.6