很长的数组应该如何分批上传呢?

譬如有一个万条以上的数组arr,需要传递给后端,现在想让他1000条,1000条的传,目前的思路是,设置一个变量a初始值为1000,axios交互时先判断a是否==1000,若成立,从arr中取出a长度的数据,上传,得到上传成功的指令,再次调用此方法,并将a+=1000。这个思路正确吗?还有方法可以自己调用自己吗?这是我目前的两个疑惑

阅读 4.6k
4 个回答
function uploadArr(page) {
    let arr = [];
    let finished = false;
    if (page * 1000 > list.length) {
        // 标记结束
        finished = true;
        arr = list.slice(0, list.length);
    } else {
        arr = list.slice((page-1)*1000, page * 1000);
    }
    axios.post("/xxx",{arr}).then(res => {
        if (res.code === 200) {
            // 成功
            if (!finished) {
                page += 1;
                uploadArr(page);
            }
        }
    });
}
uploadArr(1)

一万条真心不算啥,除非超时否则不用处理。如果经常超时可以改用流格式传输,再不行就考虑断点续传。

直接把数组提前切片,按顺序上传即可,代码简洁,无心智负担
伪代码

async postArray() {
  const arr = new Array(10000).fill(1);
  const arrList = Array.from(
    {length: Math.ceil(arr.length / 1000)},
    (v, i) => arr.slice(i * 1000, (i + 1) * 1000),
  );
  for (const ary of arrList) {
    await this.$axios.post('/xxx', {ary});
  }
},

前后端通过WebSocket建立一个长链接来传递大批量数据也可以尝试下,减少网络开销

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题