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 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
Jquery replace 字符替换实现代码
Dec 02 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
Js获取下拉框选定项的值和文本的实现代码
Feb 26 Javascript
javascript事件委托的方式绑定详解
Jun 10 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
Sep 23 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
微信小程序点击控件修改样式实例详解
Jul 07 Javascript
最后说说Vue2 SSR 的 Cookies 问题
May 25 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 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/06/15 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
javascript实现滑动解锁功能
2017/03/22 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
js制作提示框插件
2020/12/24 Javascript
python生成九宫格图片
2018/11/19 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
Python读取stdin方法实例
2019/05/24 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python根据文本生成词云图代码实例
2019/11/15 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
护士进修自我鉴定
2014/02/07 职场文书
工作表现自我评价
2014/02/08 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
大学生简历求职信
2014/06/24 职场文书
政协工作总结2015
2015/05/20 职场文书
趣味运动会广播稿
2015/08/19 职场文书