如何在JavaScript中按顺序执行多个Promise

如何在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 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程