有10000个数据,需要顺序的批量提交到服务器(怎么使用js实现)?

作者站长头像
站长
· 阅读数 5

有10000个数据,需要顺序的批量提交到服务器(怎么使用js实现)?

回复
1个回答
avatar
test
2024-07-08

顺序,批量,两个关键字

先说批量,如果 1000 个一批,就不存在顺序问题。既然存在顺序问题,那一批是多少个……当然作为测试题来说多少个不重要,可以假设 100 个一批,需要分 10 批。所以第一个考点是,如何分批,Lodash 的 _.chunk 就是干这个事情的。但是在这个问题上用 chunk 比较费空间,不是最优解。

然后说顺序。提交到服务器是一个异步操作,异步操作的顺序需要通过回调来保证。因为这里涉及到多次(且不定次数)提交,所以本质上是一个递归。当然如果使用 await 语法,就可以用一个简单的循环来实现。

async function submitAll(list, chunk) {
    for (let i = 0; i < list.length; i += chunk) {
        const subList = list.slice(i, i + chunk);
        await axios.post(url, subList);
    }
}

回调写法大概是这样

function submitAll(list, chunk, doneCallback) {
    submit(0);

    function submit(i) {
        if (i >= list.length) {
            doneCallback();
            return;
        }

        const data = list.slice(i, i + chunk);
        axios.post(url, data)
            .then(() => submit(i + chunk));
    }
}

反正用 await 肯定是简单得多,但要注意错误处理。Promise.then 方式如果出错不会中断程序,如果没有 catch() 会直接忽略错误。但是 await 方式发生错误会抛异常,必须要使用 try ... catch 语法。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容