You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中Promise.all未等待所有Promise完成就执行页面刷新问题

问题分析与解决

你的代码核心问题在于Papa.parse是异步执行的,complete回调会在文件解析完成后才触发,但你在调用Papa.parse后立刻就执行了await Promise.all(promises)——这时候promises数组还是空的,所以Promise.all直接完成,页面提前刷新,后续解析完成后才发起的axios请求还没执行完就被页面刷新中断了。

修复步骤

把Papa.parse包装成Promise,让async函数等待文件解析完成后再收集请求promise,最后统一等待所有请求完成:

async function beginpost() {
    const APIURL = 'http://localhost:8080/new'; // 用const避免全局变量污染
    const files = e.target.files;
    if (!files) return;

    // 把Papa.parse包装成Promise,等待文件解析完成
    const parseResult = await new Promise((resolve) => {
        Papa.parse(files[0], {
            complete: function(results) {
                resolve(results);
            }
        });
    });

    // 解析完成后,收集所有axios请求的promise
    const promises = [];
    for (const element of parseResult.data) {
        // 跳过空行(避免无效请求)
        if (!element[0]) continue;
        
        const Data_1 = trimstr(element[0], ' (');
        const Data_2 = element[1];
        const Data_3 = element[2];
        const Data_4 = element[3];
        const Data_5 = element[4];  
        const Data_6 = element[6];  
        const Data_7 = element[7];                         

        const requestPromise = axios.post(APIURL, {
            POST_1: ID, // 确保ID变量已定义且有有效值
            POST_2: Data_1, 
            POST_3: Data_2, 
            POST_4: Data_3, 
            POST_5: Data_4, 
            POST_6: Data_5, 
            POST_7: Data_6, 
            POST_8: Data_7
        });
        promises.push(requestPromise);
    }

    // 等待所有请求完成后再刷新页面
    await Promise.all(promises);
    window.location.reload(true);
}
beginpost();

额外优化建议

如果380条请求同时发起导致后端压力过大或浏览器请求被限制,可以考虑分批发送(比如每次发20条,完成一批再发下一批),示例代码:

// 分批处理,每20条为一批
const batchSize = 20;
for (let i = 0; i < promises.length; i += batchSize) {
    const batch = promises.slice(i, i + batchSize);
    await Promise.all(batch);
}

内容的提问来源于stack exchange,提问作者darkfury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:02:04