ES6 从入门到精通 # 19:Promise 对象的其它方法

简介: ES6 从入门到精通 # 19:Promise 对象的其它方法

说明

ES6 从入门到精通系列(全23讲)学习笔记。



resolve 跟 reject

能将现有的任何对象转换成 promise 对象

let p =new Promise(resolve => resolve("kaimo"));
console.log(p);
p.then(res => {
    console.log(res)
})


c753f04fd30748758be2d2ad9765d6c2.png


all

提供了并行的执行异步操作的行为,用于等资源都加载完了才进行操作,比如一些游戏等资源加载完才进行页面初始化。

let promise1 = new Promise((resolve, reject) => {});
let promise2 = new Promise((resolve, reject) => {});
let promise3 = new Promise((resolve, reject) => {});
let p4 = Promise.all([promise1, promise2, promise3]);
p4.then(() => {
    // 三个都成功才算成功
}).catch(err => {
    // 一个失败则失败
})



race

给某个异步请求设置超时时间,并且在超时之后执行相应的操作

例子:请求图片资源

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function requestImage(imgSrc) {
            return new Promise((resolve, reject) => {
                const img = new Image();
                img.onload = function() {
                    resolve(img);
                }
                img.src = imgSrc;
            })
        }
        function timeout() {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    reject(new Error("图片请求超时"));
                }, 2000)
            })
        }
        Promise.race([requestImage("https://kaimo313.github.io/blogs/img/avatar.jpg"), timeout()]).then(res => {
            console.log(res)
            document.body.appendChild(res);
        }).catch(err => {
            console.log(err)
        })
    </script>
</body>
</html>



8d5e39ebf08b4f9fa629b6367ed4bd6d.png



下面模拟超时,f12 找到 network 选择 slow 3g,禁用缓存


230316a1b28741cb8467382a54384b56.png


finally

finally() 方法返回一个 Promise。在 promise 结束时,无论结果是 fulfilled 或者是 rejected,都会执行指定的回调函数。这为在 Promise 是否成功完成后都需要执行的代码提供了一种方式。这避免了同样的语句需要在 then() 和 catch() 中各写一次的情况。


Promise.race([requestImage("https://kaimo313.github.io/blogs/img/avatar.jpg"), timeout()]).then(res => {
    console.log(res)
    document.body.appendChild(res);
}).catch(err => {
    console.log(err)
}).finally(() => {
    console.log("finally")
})


e59ce33ecc914c7585a4657637ff37c0.png















目录
相关文章
|
3月前
|
前端开发 索引
Promise.all() 方法的参数可以是什么类型?
综上所述,`Promise.all()` 方法的参数类型较为灵活,但无论使用哪种类型的可迭代对象作为参数,其核心的异步操作处理逻辑和成功失败的判断机制都是一致的,都是为了方便地处理多个异步操作的并发执行和结果汇总。
|
3月前
|
存储 前端开发
除了 Promise.all(),还有哪些方法可以处理异步并发操作?
在上述示例中,`concurrentPromises` 函数接受一个Promise数组和最大并发数作为参数,通过手动控制并发执行的Promise数量,实现了对异步操作的并发控制,并在所有Promise完成后返回结果数组。
|
1月前
|
前端开发 JavaScript
除了使用Polyfill,还有其他解决Promise.allSettled()兼容性问题的方法吗?
除了使用Polyfill,还有其他解决Promise.allSettled()兼容性问题的方法吗?
121 81
|
1月前
|
前端开发 JavaScript
Promise.allSettled()方法的语法是什么?
Promise.allSettled()方法的语法是什么?
141 79
|
1月前
|
Web App开发 前端开发 JavaScript
Promise.allSettled()方法的兼容性如何?
Promise.allSettled()方法的兼容性如何?
165 75
|
3月前
|
前端开发
理解 ES6 中的 Promise
【10月更文挑战第24天】ES6 中的 Promise 是一种用于处理异步操作的机制,它提供了一种更优雅、更可控的方式来处理异步任务的结果。Promise 可以看作是对异步操作结果的一种承诺,它可以处于三种不同的状态:Pending(等待中)、Fulfilled(已完成,即成功)和 Rejected(已拒绝,即失败)。
|
3月前
|
监控 调度
在什么情况下应该使用 Promise.allSettled() 方法?
总的来说,`Promise.allSettled()` 为我们处理多个异步任务提供了一种更灵活、更全面的方式,使我们能够更好地应对各种复杂的情况,确保在获取到所有任务结果的同时,能够进行更有效的后续处理和决策。
|
3月前
|
前端开发
Promise.allSettled()方法和Promise.race()方法有什么区别?
`Promise.allSettled()` 提供了一种更全面、更详细的方式来处理多个 `Promise`,而 `Promise.race()` 则更强调速度和竞争。我们需要根据具体的需求来选择使用哪种方法。
|
3月前
|
前端开发 索引
Promise.all() 方法的参数可以是哪些数据类型?
`Promise.all()` 方法的参数具有很大的灵活性,可以适应多种不同的场景和需求,方便地处理多个异步操作的并发执行和结果汇总。
|
3月前
|
前端开发
Promise.race() 方法在什么场景下使用?
`Promise.race()` 方法通过其独特的竞争机制,在需要快速获取结果、设置超时控制、实现快速失败以及根据条件动态选择异步操作等场景中,能够提供简洁有效的解决方案,帮助优化异步操作的执行流程和提高系统的响应性能。