MST

星途 面试题库

面试题:网络编程之Node.js并发请求基础

在Node.js中,简要说明如何使用`async/await`配合`Promise.all`来处理并发请求,并举例阐述其原理。
38.2万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 使用方式
    • async/await 用于异步函数中处理 PromisePromise.all 用于并行处理多个 Promise
    • 首先创建多个返回 Promise 的函数,然后将这些 Promise 放入 Promise.all 中,在 async 函数里使用 await 等待 Promise.all 执行完成。
  2. 示例代码
async function fetchData() {
    // 模拟三个异步请求
    const promise1 = new Promise((resolve) => {
        setTimeout(() => {
            resolve('Result of promise1');
        }, 1000);
    });
    const promise2 = new Promise((resolve) => {
        setTimeout(() => {
            resolve('Result of promise2');
        }, 1500);
    });
    const promise3 = new Promise((resolve) => {
        setTimeout(() => {
            resolve('Result of promise3');
        }, 2000);
    });

    try {
        const results = await Promise.all([promise1, promise2, promise3]);
        console.log(results); // 输出: ['Result of promise1', 'Result of promise2', 'Result of promise3']
    } catch (error) {
        console.error(error);
    }
}

fetchData();
  1. 原理阐述
    • Promise.all 接收一个 Promise 数组作为参数,它返回一个新的 Promise
    • 当传入的所有 Promise 都变为 resolved 状态时,这个新 Promise 才会 resolved,并且其 resolve 的值是一个包含所有传入 Promiseresolved 值的数组,顺序与传入数组中的 Promise 顺序一致。
    • 如果其中任何一个 Promise 变为 rejected 状态,新 Promise 就会立即 rejected,并将第一个 rejectedPromise 的错误信息作为它的 reject 值。
    • async/await 语法糖使异步代码看起来更像同步代码。await 只能在 async 函数内部使用,它暂停 async 函数的执行,直到 await 后的 Promise 被解决(resolvedrejected)。在上述示例中,await Promise.all([promise1, promise2, promise3]) 等待所有并发的异步操作完成,然后将结果数组赋值给 results,如果有错误则进入 catch 块处理。