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 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。