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...!!
极客教程