ES6中的Promise对象如何使用
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本文小编为大家详细介绍"ES6中的Promise对象如何使用",内容详细,步骤清晰,细节处理妥当,希望这篇"ES6中的Promise对象如何使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一
千家信息网最后更新 2026年11月03日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对象如何使用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
对象
处理
方法
静态
文章
内容
多个
可怕
妥当
最快
优雅
成功
例子
函数
前处理
地狱
思路
新知
方式
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技有限公司
互联网科技工作委员会副主任毛军
国智互联网科技
互联网科技社
有马互联网科技
腾讯科技 互联网女皇
佰商互联网科技有限公司
互联网和高科技公司
青岛中康互联网医疗科技有限公司
常德市电业局互联网科技部
南山科技园互联网公司有哪些
互联网公司科技股
重庆互联网医院沙龙医盟信息科技
高科技互联网套路
互联网科技资金流入
郑州欣桑互联网科技有限公司
互联网硬科技公司
萌小萌互联网科技河南有限公司
青岛易易互联网科技
承德科技产业互联网平台
花魁咖啡
科技互联网公司logo
润盈互联网科技
科技伦理 互联网公司
央行互联网金融科技公司
互联网科技产业特征
朱啸虎曾投资哪些互联网科技企业
上海京穆互联网科技有限公司
互联网金融科技元年
福州德业互联网科技