如何在JavaScript中按顺序执行多个Promise
在本文中,我们将尝试理解如何使用JavaScript提供的几种技术或方法按顺序(一个接一个地)轻松执行多个Promise。
让我们首先快速了解如何使用JavaScript提供的以下语法创建一个Promise。
语法: 使用以下语法可以创建JavaScript的Promise。
let promise = new Promise((resolve, reject) => resolve(10))
使用上述语法,我们可以通过解决它(具有已解决状态)或拒绝它(具有已拒绝状态)成功创建我们的Promise。
例子: 在这个例子中,我们将创建一个简单的Promise来看看它是如何工作或如何执行的。
let promise = new Promise((resolve, reject) => {
resolve("GeeksforGeeks");
});
promise.then(result => console.log(result));
输出:
GeeksforGeeks
现在我们已经知道如何创建Promise了,让我们快速看一下如何以顺序方式执行多个Promise。
以下是一些方法,我们可以轻松按顺序执行多个Promise。
方法1:
- 在这种方法中,我们将使用 Promise.all() 方法,该方法以单个数组作为输入接受所有Promise。
- 因此,该方法在其中执行所有Promise并返回一个新的单个Promise,其中所有其他Promise的值合并在一起。
- 新返回的单个Promise中的值将按顺序排列(即一个接一个)。
- 返回的输出将以数组的形式返回,其中包含由其他两个Promise解析或拒绝的值。
例子: 让我们看一下下面的代码,它说明了上述方法:
let promise1 = new Promise((resolve, reject) => {
resolve("Hello! ");
});
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("GeeksforGeeks");
}, 1000);
});
Promise.all([promise1, promise2])
.then((result) => console.log(result));
输出:
['Hello!', 'GeeksforGeeks']
方法2:
- 在这种方法中,我们将使用 Promise.allSettled() 方法,该方法与Promise.all()方法非常相似,它以单个数组作为输入执行并按顺序执行它们。
- 有一个细微的差别,即Promise.allSettled()方法返回一个对象数组,其中除了每个Promise的状态(已完成或已拒绝)外,还有每个Promise的值。
例子: 让我们看一下下面的代码,它说明了上述方法:
let promise1 = new Promise((resolve, reject) => {
resolve("Hello! ");
});
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("GeeksforGeeks");
}, 1000);
});
Promise.allSettled([promise1, promise2])
.then((result) => console.log(result));
输出:
[
{ status: 'fulfilled', value: 'Hello! ' },
{ status: 'fulfilled', value: 'GeeksforGeeks' }
]
方法3:
- 在这个方法中,我们将使用for-of循环以及异步-等待方法。
- 我们将在promise数组上运行循环,进一步创建一个异步函数,并在其中等待结果,以及使用try-catch块将结果打印到浏览器的控制台。
示例: 让我们看看以下代码,它说明了上面的方法:
let promise1 = new Promise((resolve, reject) => {
resolve("Hello! ");
});
let promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("GeeksforGeeks");
}, 1000);
});
let promiseExecution = async () => {
for (let promise of [promise1, promise2]) {
try {
const message = await promise;
console.log(message);
} catch (error) {
console.log(error.message);
}
}
};
promiseExecution();
输出:
Hello!
GeeksforGeeks
阅读更多:JavaScript 教程