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 相关文章推荐
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
Jquery为DIV添加click事件的简单实例
Jun 02 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
Javascript模拟实现new原理解析
Mar 03 Javascript
react antd表格中渲染一张或多张图片的实例
Oct 28 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中文字母数字验证码实现代码
2008/04/25 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
使用JS动态显示文本
2017/09/09 Javascript
详解Node 定时器
2018/02/26 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python实现排序算法
2014/02/14 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Python中文竖排显示的方法
2015/07/28 Python
python查看微信好友是否删除自己
2016/12/19 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
详解python算法之冒泡排序
2019/03/05 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
优秀毕业大学生推荐信
2013/11/13 职场文书
售后主管岗位职责
2013/12/08 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
安全施工责任书
2014/08/25 职场文书
公司开除员工通知
2015/04/22 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
西游记读书笔记
2015/06/25 职场文书
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang