es6中Promise 对象基本功能与用法实例分析


Posted in Javascript onFebruary 23, 2020

本文实例讲述了es6中Promise 对象基本功能与用法。分享给大家供大家参考,具体如下:

Promise 是异步编程的一种解决方案,解决——回调函数和事件

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。

下面代码创造了一个Promise实例。

基本用法

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。

const promise = new Promise(function(resolve, reject) {
 //resolve (data)  成功
 //reject  (error )失败
});

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

promise.then(function(value) {
 // success
}, function(error) {
 // err
});

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

下面是一个Promise对象的简单例子

function fun(ms){
 return new promise((res,rej) => {
 setTimeout(res,ms)
 })
}
fun(100).then((val) => {
 console.log(val)
})

promise还可以用来加载图片

function loadImageAsync(url) {
 return new Promise(function(resolve, reject) {
  const image = new Image();
  image.onload = function() {
   resolve(image);
  };
  image.onerror = function() {
   reject(new Error('Could not load image at ' + url));
  };
  image.src = url;
 });
}

上面代码中,使用Promise包装了一个图片加载的异步操作。如果加载成功,就调用resolve方法,否则就调用reject方法。

2,用Promise对象实现的 Ajax 操作的例子。

const getJSON = function(url) {
 const promise = new Promise(function(resolve, reject){
  const handler = function() {
   if (this.readyState !== 4) {
    return;
   }
   if (this.status === 200) {
    resolve(this.response);
   } else {
    reject(new Error(this.statusText));
   }
  };
  const client = new XMLHttpRequest();
  client.open("GET", url);
  client.onreadystatechange = handler;
  client.responseType = "json";
  client.setRequestHeader("Accept", "application/json");
  client.send();
 });
 return promise;
};
getJSON("/posts.json").then(function(json) {
 console.log('Contents: ' + json);
}, function(error) {
 console.error('出错了', error);
});

注意,调用resolve或reject并不会终结 Promise 的参数函数的执行。

Promise.prototype.finally()

finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

上面代码中,不管promise最后的状态,在执行完then或catch指定的回调函数以后,都会执行finally方法指定的回调函数,finally本质上是then方法的特例。

Promise.resolve()

//有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用。
const jsPromise = Promise.resolve($.ajax('/whatever.json'));

上面代码将 jQuery 生成的deferred对象,转为一个新的 Promise 对象。

Promise.resolve等价于下面的写法。

Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))
//Promise.resolve方法的参数分成四种情况。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript function调用时的参数检测常用办法
Feb 26 Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
JS如何判断json是否为空
Jul 06 Javascript
AngularJS过滤器filter用法总结
Dec 13 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
JavaScript生成图形验证码
Aug 24 Javascript
jQuery实现QQ空间汉字转拼音功能示例
Jul 10 jQuery
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
如何使用pm2快速将项目部署到远程服务器
Mar 12 Javascript
详细谈谈JavaScript中循环之间的差异
Aug 23 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 #Javascript
原生javascript单例模式的应用实例分析
Feb 23 #Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
Feb 23 #Javascript
webpack.DefinePlugin与cross-env区别详解
Feb 23 #Javascript
深入理解webpack process.env.NODE_ENV配置
Feb 23 #Javascript
微信小程序实现限制用户转发功能的实例代码
Feb 22 #Javascript
vue.js实现简单的计算器功能
Feb 22 #Javascript
You might like
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
php class类的用法详细总结
2013/10/17 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
基于jquery的表格排序
2010/09/11 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
js读取json文件片段中的数据实例
2017/03/09 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
详解JS模块导入导出
2017/12/20 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
解读Django框架中的低层次缓存API
2015/07/24 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
python交互模式基础知识点学习
2020/06/18 Python
python实现最短路径的实例方法
2020/07/19 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
函授毕业生自我鉴定范文
2014/03/25 职场文书