在JavaScript中实现同步并发的两个 fetch 请求

myrgd 其他 22

在JavaScript中,可以通过 Promise.allasync/await 来实现同步并发的两个 fetch 请求。这种方式允许两个请求同时开始,且当两者都完成后再进行下一步操作。

以下是一个示例:

使用 Promise.all

const fetchData = async () => {
    try {
        // 创建两个 fetch 请求
        const request1 = fetch('https://api.example.com/data1');
        const request2 = fetch('https://api.example.com/data2');

        // 等待两个请求同时完成
        const [response1, response2] = await Promise.all([request1, request2]);

        // 解析返回的 JSON 数据
        const data1 = await response1.json();
        const data2 = await response2.json();

        // 同步使用两者的数据
        console.log('Data 1:', data1);
        console.log('Data 2:', data2);
    } catch (error) {
        console.error('Error:', error);
    }
};

fetchData();

使用 async/await 手动控制

虽然 Promise.all 是更常用的方式,但如果需要逐步处理每个请求的结果,可以通过 async/await 手动控制:

const fetchData = async () => {
    try {
        // 并发开始两个请求
        const request1 = fetch('https://api.example.com/data1');
        const request2 = fetch('https://api.example.com/data2');

        // 等待第一个请求完成
        const response1 = await request1;
        const data1 = await response1.json();

        // 等待第二个请求完成
        const response2 = await request2;
        const data2 = await response2.json();

        // 使用两者的数据
        console.log('Data 1:', data1);
        console.log('Data 2:', data2);
    } catch (error) {
        console.error('Error:', error);
    }
};

fetchData();

两者的差异

  1. Promise.all
    • 更简洁。
    • 如果任意一个请求失败,会导致整个 Promise.all 被拒绝。
  2. 手动控制
    • 提供更多控制权。
    • 即使一个请求失败,也可以继续处理另一个请求。

使用场景

  • Promise.all 适用于需要确保所有请求都成功完成的场景。
  • 手动控制 适用于需要部分失败时继续操作的场景。

根据需求选择合适的方法即可!

回复

我来回复
  • 暂无回复内容

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信