JavaScript 的 Promise 对象和 Promise.all 方法的使用

JavaScript 中的 Promise 对象

什么是 Promise?

Promise 是一种用于处理异步操作的对象。它代表一个尚未完成但预计将来会完成的操作及其结果。

主要特点:
  1. 状态:

    • Pending(进行中): 初始状态,既未成功,也未失败。
    • Fulfilled(已成功): 操作成功完成。
    • Rejected(已失败): 操作失败。
  2. 方法:

    • .then(onFulfilled[, onRejected]): 注册回调函数,分别在 Promise 成功或失败时调用。
    • .catch(onRejected): 特殊形式的.then(),仅注册拒绝情况下的回调。
    • .finally(onFinally): 无论 Promise 结果如何都会执行的回调。
  3. 链式调用
    fetch(url)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error('Fetch failed:', error));

  4. 静态方法:

    • Promise.resolve(value) 创建一个已解决的 Promise 实例。
    • Promise.reject(reason) 创建一个已拒绝的 Promise 实例。

使用 Promise.all

Promise.all(iterable) 方法接收一组 Promise 并返回一个新的 Promise。当所有的 Promise 都成功完成后,新的 Promise 将被解决;如果有任何一个 Promise 被拒绝,则整个组合也会立刻被拒绝。

特性:

  1. 返回一个新 Promise。
  2. 当所有提供的 Promises 全部满足时,返回的 Promise 才会被解决。
  3. 如果其中一个 Promise 被拒绝,返回的新 Promise 会立即进入 rejected 状态,并携带第一个被拒绝的原因作为其结果。
const promise1 = new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000));
const promise2 = new Promise((resolve, reject) => setTimeout(() => resolve(2), 2000));

Promise.all([promise1, promise2])
    .then(values => {
        console.log(values); // 输出: [1, 2]
    })
    .catch(error => {
        console.error(error);
    });

Promise.allSettled

Promise.allSettled(iterable) 方法同样接收一组 Promise 并返回一个新的 Promise。当所有的 Promise 都结束(无论是成功还是失败)时,新的 Promise 才会被解决。

特性:

  1. 返回一个新 Promise。
  2. 包含所有 Promise 结果的一个数组,不论它们是成功的还是失败的。
  3. 每个元素都是一个对象,表示对应的 Promise 的最终状态(fulfilled 或 rejected),并带有相应的值或理由。
const promise1 = new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000));
const promise2 = new Promise((resolve, reject) => setTimeout(() => reject(new Error("Whoops!")), 2000));

Promise.allSettled([promise1, promise2])
    .then(results => {
        console.log(results);
        /*
        输出:
        [
            { status: 'fulfilled', value: 1 },
            { status: 'rejected', reason: Error: Whoops! }
        ]
        */
    });

Promise.any

 Promise.any(iterable) 方法接收一组 Promise 并返回一个新的 Promise。当其中的第一个 Promise 成功解决时,新的 Promise 就会被解决如果所有的 Promise 都被拒绝,则返回的 Promise 会以 AggregateError 形式被拒绝。

特性:

  • 返回一个新 Promise。
  • 只需等待第一个 fulfilled 的 Promise。
  • 如果所有 Promise 都被拒绝,则返回的 Promise 会被拒绝,并附带一个包含所有错误信息的 AggregateError 对象。
const promise1 = new Promise((resolve, reject) => setTimeout(() => reject(new Error("Whoops!")), 1000));
const promise2 = new Promise((resolve, reject) => setTimeout(() => resolve(1), 2000));

Promise.any([promise1, promise2])
    .then(result => {
        console.log(result); // 输出: 1
    })
    .catch(errors => {
        console.error(errors.message); // 输出: All Promises were rejected
    });

Promise.race

 Promise.race(iterable) 方法接收一组 Promise 并返回一个新的 Promise。当其中的第一个 Promise 解决(不论是成功还是失败)时,新的 Promise 就会被解决。

特性:

  • 返回一个新 Promise。
  • 只需等待第一个 settled 的 Promise。
  • 第一个 settle 的 Promise 决定了返回 Promise 的状态(fulfilled 或 rejected)。
const promise1 = new Promise((resolve, reject) => setTimeout(() => resolve(1), 1000));
const promise2 = new Promise((resolve, reject) => setTimeout(() => reject(new Error("Whoops!")), 2000));

Promise.race([promise1, promise2])
    .then(result => {
        console.log(result); // 输出: 1
    })
    .catch(error => {
        console.error(error);
    });

总结:

  1. Promise.all: 必须所有 Promise 都成功才能解决问题。
  2. Promise.allSettled: 等待所有 Promise 完结,无论成功与否。
  3. Promise.any: 至少一个 Promise 成功即可解决问题。
  4. Promise.race: 最快的那个决定一切。

MMSE简易智能精神状态检查量表 姓名:_____________ 性别:_______ 年龄:_______ 文化程度:__________ ______ 评定时间:_________年___月_____日_____时~_____时 既往病史:_________________ _____ " " " "记 " " " " " " "录 " " " " " " " "错 "正 " " " " " "误 "确 " "I定向力 "时间 "星期几 " "0 "1 " "10分 "定向 " " " " " " "(问现在是) " " " " " " " "几号 " "0 "1 " " " "几月 " "0 "1 " " " "什么季节 " "0 "1 " " " "哪一年? " "0 "1 " " "地点 "哪家医院 " "0 "1 " " "定向 " " " " " " "(问您现在是在) " " " " " " " "第几层楼 " "0 "1 " " " "哪个街道或乡 " "0 "1 " " " "哪个城市 " "0 "1 " " " "哪个国家 " "0 "1 " "II即刻记忆力"连续说出这三样东西后提 "窗子 " "0 "1 " "3分 "问 " " " " " " " "国旗 " "0 "1 " " " "胶布 " "0 "1 " "III注意力 "要求病人从100开始减7后 "100-7=93 " "0 "1 " "计算力 "得出答案 " " " " " "5分 " " " " " " " " "93-7=86 " "0 "1 " " " "86-7=79 " "0 "1 " " " "79-7=72 " "0 "1 " " " "72-7=65 " "0 "1 " "IV短程记忆力"刚才说的三样东西是什么 "窗子 " "0 "1 " "3分 " " " " " " " " "国旗 " "0 "1 " " " "胶布 " "0 "1 " "V语言能力 "物体 "(拿出手表)请问这是" "0 "1 " "9分 "命名 "什么? " " " " " " "(拿出铅笔)请问这是" "0 "1 " " " "什么? " " " " " "复述 "重复"四十四只石狮子"" "0 "1 " " "三步 "右手拿纸 " "0 "1 " " "命令 " " " " " " " "用双手把纸对折 " "0 "1 " " " "将纸放在你的大腿上 " "0 "1 " " "阅读 "按纸张上"闭上您的眼 " "0 "1 " " " "睛"做 " " " " " "表达 "说一句有主语、动词的" "0 "1 " " " "完整的话 " " " " " "结构 "图形描画:2个交汇的 " "0 "1 " " " "五边形 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 《MMSE简易智能精神状态检查量表》操作说明 (以第一次答案记分) 本检查量表是根据中华医学会《行为医学量表手册》,结合相关文献工作实际整理 ,量表的评分只能作为协助评估患者走失风险的参考,疾病的诊断需结合临床,遵从医 生嘱托。 I.定向力(时间与地点定向,最高分:10分) 首先依次询问日期,再依次询问地点。以患者首次答案进行记录。 II.即刻记忆力(最高分:3分) 向患者清楚、连续、缓慢地说出3个相互无关的东西的名称(如:窗子、国旗、胶布 ,大约1秒钟说一个),不要求被试者按物品次序回答。如第一遍有错误,先记分,然后 ,再告诉被试错在哪里,并再请他回忆,但重复的次数不能超过5次。如果5次后他们仍 未记住所有的3个名称,则跳过IV部分不再检查"回忆能力"。 III.注意力计算力(最高分:5分) 要求病人从100开始减7,之后再减7,一直减5次,不得用笔计算。每答对1个得1分 ,如果前次错了,但下一个答案是对的,也得1分,如,100-7=93(正确,得分),93- 7=88(错误,不得分)但如从88-7=81(正确,得分)。 IV.短程记忆力(回忆能力,最高分:3分) 如果前次被测试者完全记住了3个无关东西名称(窗子、国旗、胶布),现在就让他 再重复一遍。每正确重复1个得1分。 V.语言能力(最高分:9分) 1. 命名能力(0-2分):分别拿出手表、铅笔问"这是什么?"。 2. 复述能力(0- 1分):要求被测试者注意你说的话并重复一次,注意只允许重复一次。这句话是"四十 四只石狮子",只有正确,咬字清楚的才记1分。 3. 三步命令(0- 3分):给被测试者一张空白的平纸,要求对方按你的命令去做,注意不要重复或示范。 只有他按正确顺序做的动作才算正确,每个正确动作计1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值