IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> JavaScript Promise.race()学习笔记(四) -> 正文阅读

[JavaScript知识库]JavaScript Promise.race()学习笔记(四)

今天我们来学习Promise.race()方法,race翻译过来是赛跑的意思,与Promise.all()的不同,all是等待所有promise完成后,而race是等最快的promise完成后就会返回。

介绍

Promise.race()方法接收一个数组形式的promise,并且返回一个promise对象,一旦数组中有一个promise被resolve或者reject就会立刻返回。

语法和Promise.all()差不多

Promise.race([promise1, promise2, promise3])
  .then(console.log)
  .catch(console.log)

Promise.race()Promise.all()区别

Promise.all()会等待所有promise完成后返回,Promise.race()会返回最快完成的promise,不管是resolve还是reject。

Promise.race() 示例代码

p1在1秒后完成,p2在2秒后完成

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('第一个promise被resolve');
    resolve(10);
  }, 1 * 1000);

});

const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('第二个promise被resolve');
    resolve(20);
  }, 2 * 1000);
});


Promise.race([p1, p2])
  .then(value => console.log(`成功: ${value}`))
  .catch(error => console.log(`失败: ${error}`));

// 输出:
// 第一个promise被resolve
// 成功: 10
// 第二个promise被resolve

因为p1比p2快一秒,所以race会触发then,并且只返回p1的结果,p2并不会返回。

下面的例子,把p2改为reject拒绝试试,大家猜猜结果

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('第一个promise被resolve');
    resolve(10);
  }, 1 * 1000);
});

const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('第一个promise被reject');
    reject(20);
  }, 2 * 1000);
});


Promise.race([p1, p2])
  .then(value => console.log(`成功: ${value}`))
  .catch(error => console.log(`失败: ${error}`));

// 输出:
// 第一个promise被resolve
// 成功: 10
// 第二个promise被resolve

可以看到结果和上面一样,因为还是p1比p2快一秒,所以还是会返回p1。

下面再把p1改成reject,p2改成resolve试试

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('第一个promise被reject');
    reject(10);
  }, 1 * 1000);
});

const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log('第二个promise被resolve');
    resolve(20);
  }, 2 * 1000);
});


Promise.race([p1, p2])
  .then(value => console.log(`成功: ${value}`))
  .catch(error => console.log(`失败: ${error}`));

// 输出:
// 第一个promise被reject
// 失败: 10
// 第二个promise被resolve

这回结果还是p1,由于p1是reject,所以race走的catch方法。

到这里相信大家都看明白了,Promise.race就像是赛跑的一样,Promise.race([p1, p2, p3,pn])里面哪个结果跑的快,就返回哪个结果,不管结果本身是成功状态还是失败状态。

Promise.race可能在项目中使用不如Promse.all那样常用,大家知道Promise还有这个方法。

好,今天的Promise.race学习笔记到这,明天讲讲Promise怎么处理异常错误,明天见。

如果文章有帮助,微信搜索【小帅的编程笔记】,跟着我每天进步一点点

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:08:26  更:2021-10-06 12:10:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:26:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码