JavaScript 使用async-await解释Promise.any()

JavaScript 使用async-await解释Promise.any()

在本文中,我们将尝试理解如何使用async-await在JavaScript中实现Promise.any()方法,通过一些理论解释和一些编码示例来进行说明。

首先,让我们快速了解Promise.any()方法的工作原理,包括声明该方法的语法,并且通过一个简短的示例来提高概念理解。

Promise.any()方法的工作原理:

  • Promise.any()方法是Promise对象中最常用的方法之一,在该方法中,任何成功完成的promise(即不是rejected状态的promise)都将被此方法执行。
  • 处于rejected状态的promise将被拒绝,并且不会被该方法执行。
  • 假设有四个promise,其中三个成功完成(即”resolved”),一个被拒绝,则在这三个promise中,最快完成的promise将首先被执行,其余promise可能不会被该方法执行。
  • Promise.any()方法在某种程度上与Promise.race()方法的行为类似。在Promise.race()方法中,首先成功完成(或解决)的promise将被执行,其余的promise将保持未执行状态。

    Promise.any()方法的语法: 以下是实现Promise.any()方法的语法:

Promise.any([first_promise , second_promise , ...]).then(
    // do something.....
)

既然我们已经看过了一些Promise.any()方法的理论解释,那么现在让我们快速地使用一个示例来直观地展示上述所有的事实,具体如下:

示例1: 在这个示例中,我们将创建四个Promise对象,其中一个处于rejected状态,另外三个处于resolved状态。在所有的resolved状态的Promise对象中,我们将创建不同的计时器函数(setTimeout函数)并使用不同的定时器。然后,我们将使用Promise.any()方法,该方法将接受一个可迭代对象(在大多数情况下,使用数组)。之后,我们将使用then()方法尝试将执行该方法后所获得的结果输出到浏览器的控制台中。

Javascript

<script> 
    let rejected_promise = new Promise( 
        (resolve, reject) => reject("Rejected Promise....")); 
  
    let first_resolved_promise = new Promise( 
        (resolve, reject) => { 
            setTimeout(() => { 
                resolve("GeeksforGeeks...!!"); 
            }, 1000); 
        }); 
  
    let second_resolved_promise = new Promise( 
        (resolve, reject) => { 
            setTimeout(() => { 
                resolve("JavaScript......!!"); 
            }, 2000); 
        }); 
  
    let third_resolved_promise = new Promise( 
        (resolve, reject) => { 
            setTimeout(() => { 
                resolve("TypeScript...!!"); 
            }, 3000); 
        }); 
  
    let combined_promise = [ 
        rejected_promise, 
        first_resolved_promise, 
        second_resolved_promise, 
        third_resolved_promise, 
    ]; 
  
    Promise.any(combined_promise) 
        .then((result) => console.log(result)); 
</script>

输出:

GeeksforGeeks...!!

现在我们已经理解了Promise.any()方法,同时还有一个示例。现在让我们看看如何使用async-await关键字实现Promise.any()方法,使用以下示例来说明:

示例2: 在这个示例中,我们将创建四个promise,就像我们在之前的示例中创建的那样。然后,我们将实现一个方法,在方法的前缀中添加 async 关键字,表示此特定函数现在能够处理所有传递给它的异步请求。随后,我们将创建一个可迭代对象(数组),其中包含所有四个promise,并使用另一个称为 await 的关键字在另一个变量中获取数据(数组),该关键字将在数据完成异步响应接受函数中完全获取之前等待。然后,使用Promise.any()方法,我们将使用then()和console.log()方法将结果输出到浏览器的控制台上。

JavaScript

<script> 
    let rejected_promise = new Promise( 
        (resolve, reject) => reject("Rejected Promise....")); 
  
    let first_resolved_promise = new Promise( 
        (resolve, reject) => { 
            setTimeout(() => { 
                resolve("GeeksforGeeks...!!"); 
            }, 1000); 
        }); 
  
    let second_resolved_promise = new Promise( 
        (resolve, reject) => { 
            setTimeout(() => { 
                resolve("JavaScript......!!"); 
            }, 2000); 
        }); 
  
    let third_resolved_promise = new Promise( 
        (resolve, reject) => { 
            setTimeout(() => { 
                resolve("TypeScript...!!"); 
            }, 3000); 
        }); 
  
    let combined_promise = [ 
        rejected_promise, 
        first_resolved_promise, 
        second_resolved_promise, 
        third_resolved_promise, 
    ]; 
  
    async function displayResult() { 
        try { 
            let promise_array = [ 
                rejected_promise, 
                first_resolved_promise, 
                second_resolved_promise, 
                third_resolved_promise, 
            ]; 
            let result = await promise_array; 
              
            Promise.any(combined_promise) 
                .then((result) => console.log(result)); 
        } catch (error) { 
            console.log(error.message); 
        } 
    } 
  
    displayResult(); 
</script>

输出:

GeeksforGeeks...!!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程