ES6中如何使用Promise对象
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍了ES6中如何使用Promise对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中如何使用Promise对象文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2025年11月07日ES6中如何使用Promise对象
这篇文章主要介绍了ES6中如何使用Promise对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中如何使用Promise对象文章都会有所收获,下面我们一起来看看吧。
在promise之前处理异步回调的方式
function asyncFun(a,b,callback) { setTimeout(function () { callback(a+b); },200); } asyncFun(1,2, function (res) { if(res > 2) { asyncFun(res, 2, function (res) { if(res > 4) { asyncFun(res, 2, function (res) { console.log('ok'); console.log(res); }) } }) } });从上面可以看出所谓的"回调地狱"的可怕
使用promise来优雅的处理异步
function asyncFun(a,b) { return new Promise(function (resolve, reject) { setTimeout(function() { resolve(a + b); },200); })}asyncFun(1,2).then(function (res) { if(res > 2) { return asyncFun(res, 2); }}).then(function (res) { if(res > 4) { return asyncFun(res, 2); }}).then(function (res) { console.log('ok'); console.log(res);}).catch(function (error) { console.log(error);});使用promise处理内部异常的举例
function asyncFun(a,b) { return new Promise(function (resolve, reject) { // 模拟异常判断 if(typeof a !== 'number' || typeof b !== 'number') { reject(new Error('no number')); } setTimeout(function() { resolve(a + b); },200); })}asyncFun(1,2).then(function (res) { if(res > 2) { return asyncFun(res, 2); }},function (err) { console.log('first err: ', err);}).then(function (res) { if(res > 4) { return asyncFun(res, 'a'); }},function (err) { console.log('second err: ', err);}).then(function (res) { console.log('ok'); console.log(res);},function (err) { console.log('third err: ', err);});从上面可以看出通过then的第二个回调函数处理promise对象中的异常,通过reject返回异常的promise对象
通过catch统一处理错误,通过finally执行最终必须执行的逻辑
function asyncFun(a,b) { return new Promise(function (resolve, reject) { // 模拟异常判断 if(typeof a !== 'number' || typeof b !== 'number') { reject(new Error('no number')); } setTimeout(function() { resolve(a + b); },200); })}asyncFun(1,2).then(function (res) { if(res > 2) { return asyncFun(res, 2); }}).then(function (res) { if(res > 4) { return asyncFun(res, 'a'); }}).then(function (res) { console.log('ok'); console.log(res);}).catch(function (error) { console.log('catch: ', error);}).finally(function () { console.log('finally: ', 1+2);});通过Promise.all()静态方法来处理多个异步
function asyncFun(a,b) { return new Promise(function (resolve, reject) { setTimeout(function() { resolve(a + b); },200); })}var promise = Promise.all([asyncFun(1,2), asyncFun(2,3), asyncFun(3,4)])promise.then(function (res) { console.log(res); // [3, 5, 7]});通过Promise.race()静态方法来获取多个异步中最快的一个
function asyncFun(a,b,time) { return new Promise(function (resolve, reject) { setTimeout(function() { resolve(a + b); },time); })}var promise = Promise.race([asyncFun(1,2,10), asyncFun(2,3,6), asyncFun(3,4,200)])promise.then(function (res) { console.log(res); // 5});通过Promise.resolve() 静态方法来直接返回成功的异步对象
var p = Promise.resolve('hello');p.then(function (res) { console.log(res); // hello});等同于,如下:
var p = new Promise(function (resolve, reject) { resolve('hello2');})p.then(function (res) { console.log(res); // hello2});通过Promise.reject() 静态方法来直接返回失败的异步对象
var p = Promise.reject('err')p.then(null, function (res) { console.log(res); // err});等同于,如下:
var p = new Promise(function (resolve, reject) { reject('err2');})p.then(null, function (res) { console.log(res); // err});通过一个小例子来测试Promise在面向对象中应用
'use strict';class User{ constructor(name, password) { this.name = name; this.password = password; } send() { let name = this.name; return new Promise(function (resolve, reject) { setTimeout(function () { if(name === 'leo') { resolve('send success'); }else{ reject('send error'); } }); }); } validatePwd() { let pwd = this.password; return new Promise(function (resolve, reject) { setTimeout(function () { if(pwd === '123') { resolve('validatePwd success'); }else{ reject('validatePwd error'); } }); }) }}let user1 = new User('Joh');user1.send() .then(function (res) { console.log(res); }) .catch(function (err) { console.log(err); });let user2 = new User('leo');user2.send() .then(function (res) { console.log(res); }) .catch(function (err) { console.log(err); });let user3 = new User('leo', '123');user3.validatePwd() .then(function (res) { return user3.validatePwd(); }) .then(function (res) { console.log(res); }) .catch(function(error) { console.log(error); });let user4 = new User('leo', '1234');user4.validatePwd() .then(function (res) { return user4.validatePwd(); }) .then(function (res) { console.log(res); }) .catch(function(error) { console.log(error); });关于"ES6中如何使用Promise对象"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"ES6中如何使用Promise对象"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
对象
处理
方法
静态
知识
内容
多个
篇文章
可怕
最快
优雅
成功
价值
例子
函数
前处理
地狱
操作简单
文章
方式
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发企业的财务管理
软件开发组
属于数据库应用实例的是
网上的内容有服务器存放吗
数据库password算法
怀化软件开发培训收费多少
河北大数据网络技术咨询指导
畅捷通服务器登录不上去
网络安全工程师技能等级证书
计算机网络安全实施细则
漫威超级战争无法重新连接服务器
数据库报告
大数据与网络安全的联系
pg数据库如何设置简单登录账号
委托企业软件开发费
软件开发辅助工具下载
宁波网络技术招聘
数据库设置外键关键字
淮阴区吧乐吧网络技术服务部
户外体育网络安全
信息安全专业软件开发
utt大学网络安全
栖霞区一站式软件开发售后服务
ef生成数据库模型
upnp多媒体服务器
数据库老师的评价
实现网络安全目标需要
服务器组策略管理命令
湖北企业软件开发如何收费
深圳市中美互联网科技公司