首页 > 其他分享 >js-Promise的all、allSettled、any、race 方法简介

js-Promise的all、allSettled、any、race 方法简介

时间:2022-09-05 17:59:13浏览次数:135  
标签:promise1 resolve js race Promise reject catch promise2

1、all

所有的Promise对象均成功后才会执行all中的then回调,否则返回的是最先rejected状态的值。

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise1');
    }, 1000);
})
const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise2');
    }, 2000);
})
const promise3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('promise3');
    }, 1000);
})

// 进入then回调,打印all_then
Promise.all([promise1, promise2]).then((values) => {
    console.log('all_then', values)
}).catch(reason => {
    console.log('all_catch', reason)
})

// 进入catch回调,打印all_catch
Promise.all([promise1, promise2, promise3]).then((values) => {
    console.log('all_then', values)
}).catch(reason => {
    console.log('all_catch', reason)
})

2、allSettled

所有的Promise对象均出现结果(无论成功或失败)后才会执行allSettled中的then回调(只会进入then回调)。

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise1');
    }, 1000);
})
const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise2');
    }, 2000);
})
const promise3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('promise3');
    }, 1000);
})

// 进入then回调
Promise.allSettled([promise1, promise2, promise3]).then((values) => {
    console.log('allSettled_then', values)
}).catch(reason => {
    console.log('allSettled_catch', reason)
})

3、any

和all相反,所有的Promise对象均失败后才会执行any中的失败回调,否则当任意一个Promise对象成功就会直接进入then回调。

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('promise1');
    }, 1000);
})
const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('promise2');
    }, 2000);
})
const promise3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('promise3');
    }, 1000);
})

// 全部reject才会进入then回调
Promise.any([promise1, promise2, promise3]).then((values) => {
    console.log('any_then', values)
}).catch(reason => {
    console.log('any_catch', reason)
})

4、race

顾名思义,谁跑得快就返回当前Promise状态的值

const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise1');
    }, 500);
})
const promise2 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('promise2');
    }, 2000);
})
const promise3 = new Promise((resolve, reject) => {
    setTimeout(() => {
        reject('promise3');
    }, 1000);
})

// 进入then回调
Promise.race([promise1, promise2, promise3]).then((values) => {
    console.log('race_then', values)
}).catch(reason => {
    console.log('race_catch', reason)
})

// const promise1 = new Promise((resolve, reject) => {
//    setTimeout(() => {
//        resolve('promise1');
//    }, 1500);
// })
// 进入catch回调
Promise.race([promise1, promise2, promise3]).then((values) => {
    console.log('race_then', values)
}).catch(reason => {
    console.log('race_catch', reason)
})

 

标签:promise1,resolve,js,race,Promise,reject,catch,promise2
From: https://www.cnblogs.com/smile-fanyin/p/16659005.html

相关文章

  • 前端js vue的语音播报
    目前h5新增一个文字转语音的功能(但是正在完善中,勉强能用),h5新增的SpeechSynthesisUtterance实例首先new一个SpeechSynthesisUtterance对象使用实例对象的一些属性,包括......
  • js实现切换页面清除定时器的函数
    背景:我在切换页面的时候,发现切换回原来的页面,定时器会叠加而不会清除原来的定时器解决方法:1.定义全局变量,通过js遍历清除(不会用,但性能好)varpageTimer={};/......
  • js 日期格式化
    js日期格式化小技巧1.接收参数:-需要格式化的日期string;-format格式信息2.转换传入的日期格式并设置格式化formatconfig并赋值;3.分解format格式化所需......
  • # JS输入输出语句
    JS输入输出语句方法说明归属alert(msg)浏览器弹出警示框浏览器console.log(msg)浏览器控制台打印输出信息浏览器prompt(info)浏览器弹出输出框,用户......
  • # JS有三种书写位置
    JS有三种书写位置:行内、内嵌、外部1.行内式JS<inputtype="button"value="点我试试"onclick="alert('HelloWorld')"/>可以将单行或少量JS代码写在HTML标签的事......
  • jsp页面ie跳转谷歌
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>首页</title></head><body><div><ahref="" onclick='test()......
  • 浏览器输入URL发生了什么:DNS解析、TCP握手、HTTP缓存、重定向、服务器状态码、渲染引
    输入地址,浏览器查找域名的IP地址。浏览器向该IP地址的web服务器发送一个HTTP请求,在发送请求之前浏览器和服务器建立TCP的三次握手,判断是否是HTTP缓存,如果是强制......
  • JS实现异步的方法:回调函数callback、事件监听、setTimeout、Promise、生成器Generato
    所有异步任务都是在同步任务执行结束之后,从任务队列中依次取出执行。回调函数是异步操作最基本的方法,比如AJAX回调,回调函数的优点是简单、容易理解和实现,缺点是不利于代码......
  • js中null和undefined的区别
    undefind是全局对象的一个属性,当一个变量没有被赋值或者一个函数没有返回值或者某个对象不存在某个属性却去访问或者函数定义了形参但没有传递实参,这时候都是undefined。......
  • js判断变量数据类型typeof、instanceof、Object.prototype.toString.call()、 constru
    JavaScript有4种方法判断变量的类型,分别是typeof、instanceof、Object.prototype.toString.call()(对象原型链判断方法)、constructor(用于引用数据类型) typeof:常用于......