Promise.all和Promise.race的区别和使用

这篇具有很好参考价值的文章主要介绍了Promise.all和Promise.race的区别和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Promise.all

比如当数组里的P1,P2都执行完成时,页面才显示。
值得注意的是,返回的数组结果顺序不会改变,即使P2的返回要比P1的返回快,顺序依然是P1,P2
Promise.all成功返回成功数组,
失败返回失败数据,一但失败就不会继续往下走

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
// let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.all([p1, p2, p4]).then(res => {
    console.log(res); // ['aaa', 'bbb', 'ddd']
}).catch(err => {
    console.log(err, "错误");
})

如果遇到错误的情况,那么将不会继续执行下去,直接返回catch方法

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.all([p1, p2,p3, p4]).then(res => {
    console.log(res);
}).catch(err => {
    console.log(err); //ccc
})

Promise.race

Promise.race是赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪个获取的快,就返回哪个结果,不管结果本身是成功还是失败

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.race([p1, p2, p3, p4]).then(res => {
    console.log(res, "成功"); //aaa 成功
}).catch(err => {
    console.log(err, "失败"); 
})

如果第一个请求失败就直接

let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb')
let p3 = Promise.reject('ccc')
let p4 = Promise.resolve('ddd')
Promise.race([p3, p2, p1, p4]).then(res => {
    console.log(res, "成功"); 
}).catch(err => {
    console.log(err, "失败"); //ccc 失败
})

它们两者的使用场景

Promise.all和Promise.race都是有使用场景的。
有些时候我们做一个操作可能得同时需要不同的接口返回的数据,这时我们就可以使用Promise.all;
有时我们比如说有好几个服务器的好几个接口都提供同样的服务,我们不知道哪个接口更快,就可以使用Promise.race,哪个接口的数据先回来我们就用哪个接口的数据。文章来源地址https://www.toymoban.com/news/detail-417031.html

到了这里,关于Promise.all和Promise.race的区别和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文搞懂 Promise 新 Api allSettled 的用法和 all 区别,以及如何在不支持新特性的环境下实现一个 Polyfill

    返回一个数组,每一个元素都是一个对象,里面必然包含 status 属性 status 属性只会有两个值, fulfilled 或者 rejected ,非黑即白的既即视感 allSettled 总是走 then 的,也就是并发的 Promise 出现 reject 也不会走 catch ,需要自行遍历返回的数组,判断 status 来做错误捕获 对象中还有另

    2024年02月01日
    浏览(38)
  • Vue:使用Promise.all()方法并行执行多个请求

    在Vue中,可以使用Promise.all()方法来并行执行多个请求。当需要同时执行多个异步请求时,可以将这些请求封装为Promise对象并使用Promise.all()方法来执行它们。 示例1: 以下是一个示例代码,展示了如何通过Promise.all()方法并行执行多个请求: 在上述示例中,定义了三个请求:

    2024年02月12日
    浏览(38)
  • JS中使用Promise.all控制所有的异步请求都完成后,在执行后续逻辑

    使用场景为,在js中连续的几个异步耗时操作,后面的耗时操作需要使用第一个操作的返回结果。例如调用ajax异步接口,需要先创建完主表,然后拿到主表id在去循环创建明细表,等全部创建完成后,弹出提示来,或者失败提示。 通常情况,在耗时操作完成后在去调用,需要

    2024年02月13日
    浏览(44)
  • 循环异步调取接口使用数组promiseList保存,Promise.all(promiseList)获取不到数组内容,then()返回空数组

    在使用 vue + vant@2.13.2 技术栈的项目中,因为上传文件的接口是单文件上传,当使用批量上传时,只能循环调取接口;然后有校验内容:需要所有文件上传成功后才能保存,在文件上传不成功时点击保存按钮,则提示信息: \\\"文件上传未成功!\\\" 。 我使用 for 循环调取接口,然

    2024年01月18日
    浏览(42)
  • async/await实现Promise.all()

    🐱个人主页: 不叫猫先生 🙋‍♂️作者简介:专注于前端领域各种技术,热衷分享,期待你的关注。 💫系列专栏:vue3从入门到精通 📝个人签名:不破不立 Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且 只返回

    2024年01月18日
    浏览(45)
  • 【ES6】Promise.all用法

    Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 上面代码中,Promise.all()方法接受一个数组作为参数,p1、p2、p3都是 Promise 实例,如果不是,就会先调用下面讲到的Promise.resolve方法,将参数转为 Promise 实例,再进一步处理。另外,Promise.all()方法的参数可以

    2024年02月09日
    浏览(34)
  • 微信小程序-多图片上传(基于Promise.all实现)

    如你所了解到的,微信小程序的wx.uploadFile每次仅支持单文件上传。但在实际的应用场景中往往有多文件上传的需求。因此我打算用Promise.all对wx.uploadFile进行一层封装,让其能够实现多文件上传。 说在前面:若你了解Promise.all的用法.那么你一定知道这样封装的结果: 同时上传多

    2023年04月09日
    浏览(48)
  • Taro React组件开发(8) —— RuiUploadImages 多图片上传组件【Promise.all 实现】

    1. 需求分析 使用 Taro.chooseImage 实现图片的选择; 使用 Taro.uploadFile 实现图片的上传; 由于 Taro.uploadFile API 的 filePath 只能是一张图片的路径,因此上边两个 API 只能实现单图图片上传。 2. 上传图片实现 组装完整的上传接口地址【 ${ server_env_url }${ config.default[data.url] } 】; 获取

    2023年04月24日
    浏览(49)
  • 关于Promise.all 传入promose实例数组和返回值res数组元素的顺序问题

    第一个promise返回结果比第二个慢点,但是返回的结果还是在第一个元素里 所以res数组里面的元素顺序和传入的promise实例数组的元素顺序是一致的

    2024年02月06日
    浏览(40)
  • vue同时请求多个接口,接口请求完成后在处理下一个方法(Promise.all用法)

    Promise .all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。 在处理多个异步处理时非常有用,比如说一个页面上需要等两个或多个ajax的数据回来以后才正常显示。 需要特别注意的是,Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包