ES6——Promise
来源:互联网 发布:ps软件收费吗 编辑:程序博客网 时间:2024/06/06 02:38
简介
Promise是解决异步编程的一种解决方案。
什么是异步?
已有函数A,A去执行一个步骤,A执行完,再执行B。
A -> B
这么一个过程就是异步。
如何异步编程?
第一种:回调函数
第二种:事件触发
而,Promise有别于以上两种。
回调 && Promise
回调
语法
定义 A = function(B){ A函数部分; B函数部分; } 调用 A(自定义)
实例
模拟ajax一秒钟通信let ajax = function(callback){ console.log('执行'); //一秒后执行 setTimeout(function(){ callback && callback.call() },1000)};ajax(function(){ console.log('timeout1'); })
运行结果
先打印出 执行
一秒后打印 timeout1
Promise
语法
new Promise(function(resolve,reject))
补充说明
resolve执行当前操作,reject中断当前操作,这两个参数也是函数。
Promise实例具有then方法,意思是执行下一步。
实例
模拟ajax一秒钟通信let ajax = function(){ console.log('执行2'); //resolve执行当前操作,reject中断当前操作 return new Promise(function(resolve,reject){ setTimeout(function(){ resolve() },1000) })};//执行//上面提到ajax会返回一个实例对象,这个实例对象具有then方法——执行下一步 // ↓↓这里的function就是resolveajax().then(function(){ console.log('timeout2'); // ↓↓这里的function就是reject },function(){})
运行结果
先打印出 执行2
一秒后打印 timeout2
Promise基本用法
多步
和上面一样,ajax()结束过后,继续返回一个Promise对象,使用then即可。
实例
//多步 //第一步 let ajax = function(){ console.log('执行3'); //resolve执行当前操作,reject中断当前操作 return new Promise(function(resolve,reject){ setTimeout(function(){ resolve() },1000) }) }; //第二步 //ajax继续返回一个Promise实例对象,ajax完了以后,继续使用then ajax() .then(function(){ console.log('timeout-1'); return new Promise(function(resolve,reject){ setTimeout(function(){ resolve() },2000) }); }) //第三步 .then(function(){ console.log('timeout-2'); })
运行结果
先打印出 执行2
一秒后打印 timeout-1
再过一秒后打印 timeout-2
错误捕获
使用catch
关键字
实例
let ajax = function(num){ console.log('执行4'); return new Promise(function(resolve,reject){ //判断 if(num>5){ resolve() } else{ throw new Error('出错了') } }) } //调用 ajax(3).then(function(){ console.log('log',3); }) //捕获错误 .catch(function(err){ console.log('catch',err); });
运行结果
先是打印出错了
,
后面跟着 错误信息
Promise高级用法
Promise.all()
所有promise状态发生改变了,才进行下一步。
参数是数组
!!!
实例
//所有图片状态发生改变了(不一定加载成功,但状态已经变了),再添加到页面 //加载图片主程序 function loadImg(src){ return new Promise((resolve,reject)=>{ let img = document.createElement('img'); img.src = src; //图片加载 img.onload=function(){ resolve(img); } //抛出错误,并停止 img.onerror=function(err){ reject(err); } }) } //显示图片(添加到页面) function showImgs(imgs){ imgs.forEach(function(img){ document.body.appendChild(img); }) } //all()把多个promise实例合并为一个 Promise.all([ loadImg('xxx.jpg'), loadImg('xxx2.jpg'), loadImg('xxx3.jpg'), ]).then(showImgs)
Promise.race()
和all相反,有一个状态发生改变就行,只执行一项。
//哪张图片先加载完,就显示到页面 Promise.race([ loadImg('xxx.jpg'), loadImg('xxx2.jpg'), loadImg('xxx3.jpg'), ]).then(showImgs)
阅读全文
0 0
- ES6——Promise
- ES6 —(Promise)
- ES6————Promise介绍
- Javascript (ES6)中的神器——Promise
- node与ES6系列2——promise对象
- ES6个人学习整理(六)——Promise
- ES6 异步编程(一)——Promise
- 11、异步操作之Promise—ES6学习笔记
- ES6--Promise
- ES6 Promise
- ES6-Promise
- ES6 Promise
- ES6 Promise
- es6 promise
- Promise ES6
- ES6 Promise
- ES6--promise
- ES6: Promise
- pdf.js 利用HTML5技术显示pdf内容
- java后台报错:Unknown column 'xxx' in 'field list'
- appium+python一个脚本同时运行在多台android设备
- JSON学习小结
- Android源码分析之浅析Android系统启动过程
- ES6——Promise
- 课堂练习2(第四周)
- Java之图片添加文字
- 3.2类的成员函数【C++】
- Sublime Text 最新注册码
- makefile模式规则
- jquery dialog 缓存问题
- Xcode添加 eclipse 删除行、复制行快捷键
- codevs 1231 最优布线问题 并查集 解题报告