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 相关文章推荐
jquery插件pagination实现无刷新ajax分页
Sep 30 Javascript
TypeScript Type Innference(类型判断)
Mar 10 Javascript
jQuery实现简单滚动动画效果
Apr 07 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
Aug 24 Javascript
80%应聘者都不及格的JS面试题
Mar 21 Javascript
iView框架问题整理小结
Oct 16 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
Apr 10 Javascript
详解wepy开发小程序踩过的坑(小结)
May 22 Javascript
vue里的data要用return返回的原因浅析
May 28 Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 Javascript
原生JS实现多条件筛选
Aug 19 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
原生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 session会话的安全性分析
2011/09/08 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
json跟xml的对比分析
2008/06/10 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
Vue实现小购物车功能
2020/12/21 Vue.js
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
Python3实现Web网页图片下载
2016/01/28 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
2016/02/19 Python
Python socket实现简单聊天室
2018/04/01 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
用Python开发app后端有优势吗
2020/06/29 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
python实现按日期归档文件
2021/01/30 Python
实习护士自我鉴定
2013/10/13 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
给学校的建议书
2014/03/12 职场文书
个人批评与自我批评
2014/10/15 职场文书
2014年残疾人工作总结
2014/12/06 职场文书
地震慰问信
2015/02/14 职场文书
可可西里观后感
2015/06/08 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android