收藏
回答

云函数里调用cloud.callFunction,可能参数数据量有点大,它既不执行也不报错什么鬼?

有一个查询数据并导出excel的业务流程,当数据组装好了开始调用导出云函数时:

console.log(1)
console.log(array.length)

const resFile = await cloud.callFunction({
  name: "exportToExcel",
  data: {
    cloudPath,
    array,
    rangeArray: rangeArray,
    name: '订单列表'
  }
})
console.log(2)


打印的日志内容是:

2019-12-29T06:19:55.927Z  1
 
2019-12-29T06:19:55.928Z  1821
 
2019-12-29T06:19:56.414Z  2

可以看出来,exportToExcel被执行了半秒钟左右,但是问题来了,返回结果resFile不正常,是undefined,然后云开发后台查阅exportToExcel,没有调用记录,这是什么鬼?


大概是数据量太大出错,因为array length在几百的时候都没问题的。但又无法判断是哪个环节出错了。


一并附上exportToExcel的代码,就是组织参数调用第三方nodejs的一个云函数:

// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const xlsx = require('node-xlsx');

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  const array = event.array
  const cloudPath = event.cloudPath
  const name = event.name
  const rangeArray = event.rangeArray
  
  var buffer = await xlsx.build([{
    name: name,
    data: array
  }], { '!merges': rangeArray });

  return await cloud.uploadFile({
    cloudPath: cloudPath,
    fileContent: buffer
  })

}



请指教,谢谢。


回答关注问题邀请回答
收藏

3 个回答

  • suns
    suns
    2020-04-04

    云函数参数过大可能会失败,先上传,再在云函数中下载,参数传id就可以了。

    2020-04-04
    有用 2
    回复 3
    • 郑旭东
      郑旭东
      2020-04-04
      我后来的处理办法是把嵌套调用取消了,直接在当前云函数里执行相关逻辑,回避了大参数
      2020-04-04
      回复
    • PeeeYiii
      PeeeYiii
      2022-06-17回复郑旭东
      您好,可以讲讲具体是怎么回避大参数的吗,您说的嵌套取消没有悟透,麻烦啦
      2022-06-17
      回复
    • 郑旭东
      郑旭东
      2022-06-18回复PeeeYiii
      就是不要在一个云函数里再调用一个云函数
      2022-06-18
      回复
  • 龙安清
    龙安清
    2022-08-11

    遇到同样的问题,有不有解决方案呀


    2022-08-11
    有用
    回复
  • 初心
    初心
    2020-02-16

    问题解决了吗?

    2020-02-16
    有用
    回复 2
    • 郑旭东
      郑旭东
      2020-02-16
      2020-02-16
      回复
    • 郑旭东
      郑旭东
      2020-02-16
      好像看到云函数相关文档里有提到参数数据量大时,官方建议先把数据存为文件处理,我还没试过,你可以试试
      2020-02-16
      回复
登录 后发表内容
问题标签