ES6中如何使用Promise对象
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了ES6中如何使用Promise对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ES6中如何使用Promise对象文章都会有所收获,下面我们一起来看看吧
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
手磨咖啡
互联网科技金融
科技与互联网发展
期待互联网科技
狮子座互联网科技培训
上海亿帐通互联网科技
哈尔滨秒房互联网科技有限公司
青海省互联网新科技
互联网科技博主是什么意思
创业天下互联网科技有限公司
昭通云南众福互联网科技有限公司
互联网科技创新服务
互联网校园科技培训
互联网软件和科技
厦门千工互联网科技有限公司
高科技互联网发展前景如何
恒生互联网科技业指数调整周期
广州梦谷互联网科技有限公司领导
长沙渺峰互联网科技有限公司
绵阳真晨互联网科技有限公司
互联网科技产业
互联网和科技创新
互联网科技未来
港股互联网科技股
互联网科技美容
互联网科技公司名称
镁科技互联网资讯平台
消费医药和互联网科技
亳州好赞互联网科技有限公司
宇信科技在杭州互联网排第几