收藏
回答

云函数中调用云函数是有什么限制吗?

本地调试云函数调用时,出现以下异常。

云函数结构大致如下

我的用法类似于在getOpenId内通过cloud.callFunction调用sumRecord,把出错的文件放在其他的云函数目录下,就没问题,虽然可以通过这种方式解决问题,但想知道是什么原因导致会出现下面这种异常情况的,求大神指点解惑

node.js:1 [error] Unhandled Rejection at: Promise {<rejected>: Error: callFunction:fail callFunction:fail  400 Bad Request | [http://tl-4gthy7p960a2458e.tcb-api.t…, Symbol(async_id_symbol): 4954, Symbol(trigger_async_id_symbol): 4944, Symbol(destroyed): {…}} reason: Error: callFunction:fail callFunction:fail  400 Bad Request | [http://tl-4gthy7p960a2458e.tcb-api.tencentcloudapi.com/admin?&eventId=18a6ebe7183_1&seqId=18a6ebe7183_1]
    at exports.E (xxx/cloudfunctions/ugc/node_modules/@cloudbase/node-sdk/lib/utils/utils.js:29:12)
    at xxx/cloudfunctions/ugc/node_modules/@cloudbase/node-sdk/lib/utils/httpRequest.js:100:27
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Object.exports.default (xxx/cloudfunctions/ugc/node_modules/@cloudbase/node-sdk/lib/utils/httpRequest.js:373:21)
    at async xxx/cloudfunctions/ugc/node_modules/wx-server-sdk/index.js:1724:29
回答关注问题邀请回答
收藏

2 个回答

  • breeze
    breeze
    2023-09-08

    小程序里调用代码

        wx.cloud.callFunction({
          name: 'quickstartFunctions',
          data: {
            type: 'selectRecord'
          }
        })
    


    云函数目录如下

    selectRecord

    const cloud = require('wx-server-sdk');
    
    
    cloud.init({
      env: cloud.DYNAMIC_CURRENT_ENV
    });
    const db = cloud.database();
    
    
    // 查询数据库集合云函数入口函数
    exports.main = async (event, context) => {
      // 返回数据库查询结果
      // 这块是不是调用不对啊,在云函数quickstartFunctions内调用quickstartFunctions下的sumRecord
      return await cloud.callFunction({
        name: 'quickstartFunctions',
        data: {
          type: 'sumRecord'
        }
      })
    };
    


    sumRecord

    const cloud = require('wx-server-sdk');
    
    
    cloud.init({
      env: cloud.DYNAMIC_CURRENT_ENV
    });
    const db = cloud.database();
    const $ = db.command.aggregate;
    
    
    // 聚合记录云函数入口函数
    exports.main = async (event, context) => {
      // 返回数据库聚合结果
      return db.collection('sales').aggregate()
        .group({
          _id: '$region',
          sum: $.sum('$sales')
        })
        .end();
    };
    


    -------------------------------------------

    按Mr.Zhao的回复更新后,可以了。应该就是云函数间调用时用cloud.callFunction,内部调用时用import/require引入,之前的用法有问题。

    const cloud = require('wx-server-sdk');
    const sumRecord = require('../sumRecord/index.js')
    cloud.init({
      env: cloud.DYNAMIC_CURRENT_ENV
    });
    const db = cloud.database();
    
    
    // 查询数据库集合云函数入口函数
    exports.main = async (event, context) => {
      // 返回数据库查询结果
      const ret = await sumRecord.main()
      console.log(JSON.stringify(ret))
      return await db.collection('sales').get();
    };
    
    2023-09-08
    有用 1
    回复
  • Mr.Zhao
    Mr.Zhao
    2023-09-07

    真难为人啊 这咋猜

    2023-09-07
    有用
    回复 17
    • breeze
      breeze
      2023-09-07
      哈哈,我也不知道还需要什么其他信息了
      2023-09-07
      回复
    • Mr.Zhao
      Mr.Zhao
      2023-09-07回复breeze
      就讨论你现在报错的这个代码 别管其它的  把代码亮出来
      2023-09-07
      回复
    • breeze
      breeze
      2023-09-08回复Mr.Zhao
      好的,我编辑下
      2023-09-08
      回复
    • Mr.Zhao
      Mr.Zhao
      2023-09-08回复breeze
      record 里面的代码看一下
      2023-09-08
      回复
    • breeze
      breeze
      2023-09-08
      是不是不能这么用啊,我之前record里放最简单的代码都不行
      2023-09-08
      回复
    查看更多(12)
登录 后发表内容