首页 > 其他分享 >promise总结

promise总结

时间:2024-10-30 18:10:18浏览次数:5  
标签:总结 resolve console log err Promise reject promise

//所有的promise都成功
const a = [
    new Promise((resolve, reject) => { resolve("resolve:1") }),
    new Promise((resolve, reject) => { resolve("resolve:2") }),
    new Promise((resolve, reject) => { resolve("resolve:3") })
]
//有一个promise失败,其他成功
const b = [
    new Promise((resolve, reject) => { reject("reject:1") }),
    new Promise((resolve, reject) => { resolve("resolve:2") }),
    new Promise((resolve, reject) => { resolve("resolve:3") })
]
//所有的promise都失败
const c = [
    new Promise((resolve, reject) => { reject("reject:1") }),
    new Promise((resolve, reject) => { reject("reject:2") }),
    new Promise((resolve, reject) => { reject("reject:3") })
]


// promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果。
// promise.all中只要有一个失败了,走.catch(),在.catch()中获取第一个失败请求rejected抛出的结果。
// 在 Promise.all 中,如果其中任何一个 Promise 被 rejected 或抛出异常,则整个 Promise.all 将会立即被 reject,而不会等到其他 Promise 完成。
Promise.all(a).then(([p1, p2, p3]) => { console.log(p1, p2, p3) }).catch(err => { console.log(err) })
Promise.all(b).then(([p1, p2, p3]) => { console.log(p1, p2, p3) }).catch(err => { console.log(err) })
Promise.all(c).then(([p1, p2, p3]) => { console.log(p1, p2, p3) }).catch(err => { console.log(err) })
//结果:
//resolve:1 resolve:2 resolve:3
//reject:1
//reject:1


// Promise.any,它也是接受一个promise数组,只要有一个成功,就会执行.then(),返回的是第一个成功的请求resolve抛出的结果
// 只有当所有的promise都失败,才算失败,此时Promise.any 会把所有的失败/错误集合在一起,
// 返回一个失败的 promise 和AggregateError类型的实例。
Promise.any(a).then((res) => { console.log(res) }).catch(err => { console.log(err) })
Promise.any(b).then((res) => { console.log(res) }).catch(err => { console.log(err) })
Promise.any(c).then((res) => { console.log(res) }).catch(err => {
    console.log('所有 Promise 都被拒绝:', err);
    console.log('具体错误:', err.errors);
})
//结果:
//resolve:1 
//resolve:2
//所有 Promise 都被拒绝: AggregateError: All promises were rejected
//具体错误: (3) ['reject:1', 'reject:2', 'reject:3']

// Promise.allSettled,它同样是接受一个 Promise数组,但它不会执行.catch,只会执行.then,也是等所有请求结束后,返回一个数组,数组里的每项与参数的数组每项一一对应,
// 返回的每项包含字段:status:状态(rejected/fulfilled),value:成功返回的值,reason:失败返回的值。
Promise.allSettled(a).then(([p1, p2, p3]) => { console.log(p1, p2, p3) }).catch(err => { console.log(err) })
Promise.allSettled(b).then(([p1, p2, p3]) => { console.log(p1, p2, p3) }).catch(err => { console.log(err) })
Promise.allSettled(c).then(([p1, p2, p3]) => { console.log(p1, p2, p3) }).catch(err => { console.log(err) })

//结果:
//{status: "fulfilled", value: "resolve:1"} {status: "fulfilled", value: "resolve:2"} {status: "fulfilled", value: "resolve:3"}
//{status: "rejected", reason: "reject:1"} {status: "fulfilled", value: "resolve:2"} {status: "fulfilled", value: "resolve:3"}
//{status: "rejected", reason: "reject:1"} {status: "rejected", reason: "reject:2"} {status: "rejected", reason: "reject:3"}

const p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("resolve:1")
    }, 3000)
})
const p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject("reject:2")
    }, 1000)
})
const p3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve("resolve:3")
    }, 2000)
})
// Promise.race,它也是接受一个promise数组,promise哪个返回的结果最快,就返回哪个,成功就.then(),失败就.catch()


Promise.race([p1, p2, p3]).then((res) => { console.log(res) }).catch(err => { console.log(err) })


//结果:reject: 2




// Promise有pending, fulfilled, rejected三种状态,
// 其决议函数resolve()能将Promise实例的状态由pending转为fulfilled,
// 其决议函数reject()能将Promise实例的状态由pending转为rejected。
// Promise实例的状态一旦转变,不可再逆转。

//.then, .catch, .finally都产生一个新的Promise实例,
//async 方法也是一个promise。

//如何理解then中抛出异常后会触发随后的catch
// 由于.then会返回一个新的Promise实例,而在.then回调中抛出了异常,导致这个新Promise的状态变成了rejected,
// 而.catch正是用于处理这个新的Promise实例的rejected场景的。


var promise = new Promise(function (resolve, reject) {
    //To Do 要异步执行的事情,这个异步执行的事情有可能成功执行完毕,那么Promise将是fulfilled状态,如果执行失败则是rejected;
    //下面测试代码,人为设置为rejected状态;
    reject("将当前构建的Promise对象的状态由pending(进行中)设置为rejected(已拒绝)"); //当然此处也可以设置为fulfilled(已完成)状态
})

promise.then(//调用第一个then()
    success => {
        console.log("异步执行成功,状态为:fulfilled,成功后返回的结果是:" + success);
        return (" 当前 success ");
    },
    error => {
        console.log("异步执行失败,状态为rejected,失败后返回的结果是:" + error);
        return (" 当前 error ");
    }
).then(
    //调用第二个then() 因为调用第一个then()方法返回的是一个新的promise对象,此对象的状态由上面的success或者error两个回调函数的执行情况决定的:
    //如果回调函数能正常执行完毕,则新的promise对象的状态为fulfilled,下面执行success2,如果回调函数无法正常执行,则promise状态为rejected;下面执行error2
    success2 => {
        console.log("第一个then的回调函数执行成功 成功返回结果:" + success2);
        throw (" 当前 success2 ");//自定义异常抛出
    },
    error2 => {
        console.log("第一个then的回调函数执行失败 失败返回结果:" + error2);
        return (" 当前 error2 ");
    }
).catch(err => {
    //当success2或者error2执行报错时,catch会捕获异常;
    console.log("捕获异常:" + err);
});

//上述代码,打印如下:
//异步执行失败,状态为rejected,失败后返回的结果是:将当前构建的Promise对象的状态由pending(进行中)设置为rejected(已拒绝)
//第一个then的回调函数执行成功 成功返回结果: 当前 error
//捕获异常: 当前 success2

参考链接: https://www.cnblogs.com/grow-up-up/p/17000726.html

标签:总结,resolve,console,log,err,Promise,reject,promise
From: https://www.cnblogs.com/hxy--Tina/p/18516323

相关文章

  • 机器学习大纲总结
    一、概念1.人工智能人工智能包含机器学习,机器学习包含深度学习2.机器学习机器学习是实现人工智能的一种途径机器学习=传统机器学习+深度学习3.深度学习深度学习是由机器学习的一种方法发展而来4.发展三要素数据、算法、算力5.发展史5.1符号主义(20世纪50-7......
  • 使用 FastGPT 工作流搭建 GitHub Issues 自动总结机器人
    如今任何项目开发节奏都很快,及时掌握项目动态是很重要滴,GitHubIssues一般都是开发者和用户反馈问题的主要渠道。然而,随着Issue数量的增加,及时跟进每一个问题会变得越来越困难。为了解决这个痛点,我们开发了一个自动化Issue总结机器人,它的功能很简单:自动获取项目最新的Gi......
  • 上架总结
    上架总结: 1.项目内有使用到SDK需要下载最新包,有使用的文件页需要下载最新的,即使是代码一样也要下载最新的包拖入里面使用.例如项目里面用到的face++sdk,google服务文件,每个项目最好是去官网下载最新包拖入项目,不是从其他项目拖入.2.项目内有使用到第三方库的,最好混淆一......
  • Java & Lock & AQS & 总结
    前言 相关系列《Java&Lock&目录》(持续更新)《Java&Lock&AQS&源码》(学习过程/多有漏误/仅作参考/不再更新)《Java&Lock&AQS&总结》(学习总结/最新最准/持续更新)《Java&Lock&AQS&问题》(学习解答/持续更新)  涉及内容《Java&Lock&ReentrantLock......
  • 前端JavaScript的异步编程:从回调到Promise再到Async/Await
    写在前面在前端开发中,异步编程是一个非常重要的概念。随着JavaScript语言和前端技术的发展,异步编程的模式也在不断演进。本文将带你了解从最初的回调函数(Callback)到Promise,再到现代的Async/Await,这些异步编程模式的演变过程。回调函数(Callback)回调函数是最早期的异步编程......
  • (转)Go加密算法总结
    原文:https://www.cnblogs.com/you-men/p/14160439.html加密解密在实际开发中应用比较广泛,常用加解密分为:“对称式”、“非对称式”和”数字签名“。对称式:对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。具体算法主要有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算......
  • 面试总结-技术罗列
    1、JVM原理及优化:JVM调优:https://www.cnblogs.com/stubborn-dude/p/15522475.html【GC收集器】和【内存分配与回收的策略】:https://www.cnblogs.com/stubborn-dude/p/14889157.htmljvm总结:https://www.cnblogs.com/stubborn-dude/p/14707682.html2、分布式事务:https://zhuan......
  • 10.29每日总结:《程序员修炼之道》读后感2
    经过这一阶段的阅读,我对程序员这个职业有了更深的理解和感悟。这本书强调了许多重要的理念和实践方法,让我认识到作为一名程序员,不能仅仅满足于编写代码,更要注重自身的修炼和成长。它提醒我们要保持对技术的好奇心,不断学习新的知识和技能,以适应快速变化的行业需求。书中提到的“......
  • webpack总结
    ......
  • 十月二十九日总结(读书笔记三)
    在阅读《程序员修炼之道:从小工到专家》的第七和第八章时,我感受到了程序员职业生涯中更为深刻的内涵。这两章主要探讨了“代码的重构”和“团队协作”的重要性,强调了优秀程序员不仅要具备扎实的技术能力,还需要培养良好的团队协作能力和对代码质量的高度重视。这些内容对我的职业发......