weixin_43356655 2022-04-13 00:20 采纳率: 83.3%
浏览 52
已结题

微信小程序 短时间内导出excel的文件都是一样的?

代码是复制网络上,很好用~但是有个bug,就是短时间内导出的excel内容是一样的,只能过几分钟才能导出想要的文件,麻烦大 神帮忙看下是哪里可以优化一下呢~

const cloud = require('wx-server-sdk')
//这里最好也初始化一下你的云开发环境
cloud.init()
//操作excel用的类库
const xlsx = require('node-xlsx');

// 云函数入口函数
exports.main = async (event, context) => {
    try {
        let {
            userdata
        } = event

        //1,定义excel表格名
        let dataCVS = 'test.xlsx'
        //2,定义存储数据的
        let alldata = [];
        let row = event.row; //表属性
        let rowValue = event.rowValue //属性的名字
        alldata.push(row);

        for (let key in userdata) {
            let arr = [];
              for(let i in rowValue){
              arr.push(userdata[key][rowValue[i]])
              }
            alldata.push(arr)
        }
        //3,把数据保存到excel里
        var buffer = await xlsx.build([{
            name: "mySheetName",
            data: alldata
        }]);
        //4,把excel文件保存到云存储里
        return await cloud.uploadFile({
            cloudPath: dataCVS,
            fileContent: buffer, //excel二进制文件
        })

    } catch (e) {
        console.error(e)
        return e
    }
}

代码是复制网络上,很好用~但是有个bug,就是短时间内导出的excel内容是一样的,只能过几分钟才能导出想要的文件,麻烦大 神帮忙看下是哪里可以优化一下呢~

  • 写回答

1条回答 默认 最新

  • amazingTU 2022-04-15 11:01
    关注

    没用过这个方法,但是帮你分析一下。1.首先,excel表格名不该写死,应该接收传入的表名。2.async ... await.... 这是一个同步操作(不懂看一下ES6),cloud.uploadFile()是异步的,所以你的保存操作需要等待这个异步操作执行完毕,但是如果未执行完毕的时候,你又操作了,那就形成了一个任务队列,他会将你的任务一个一个的执行完毕,所以就会出现你说的现象,你肯定频繁操作了。解决办法就是看看cloud.uploadFile()这个方法有没有成功回调的方法,有的话就加上一个开关,在没有成功回调的时候禁止操作

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 修改了问题 4月13日
  • 创建了问题 4月13日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题