【Serverless】HarmonyOS 鸿蒙Next 云函数中调用云函数报错10602

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

【Serverless】HarmonyOS 鸿蒙Next 云函数中调用云函数报错10602 【问题描述】

开发者希望在云函数代码中调用别的云函数,于是参考官方文档,编写Node.js的函数代码,导入到AGC控制台进行测试,返回结果总是会报下面这个错误。

{ "code": 180000, "message": "Call handler error: 10602: agc client name already exist" }

开发者的函数代码如下:

const agconnect = require('@agconnect/common-server');
const { AGCFunction } = require("@hw-agconnect/function-server");
let path = require('path');
let api_client_path = path.join(__dirname, "agc-apiclient.json");
const agcClient = agconnect.AGCClient.getInstance();
agconnect.AGCClient.initialize(agconnect.CredentialParser.toCredential(api_client_path));
let agcFunction = new AGCFunction(agcClient);
let myHandler = function(event, context, callback, logger) {
  let callable= agcFunction.wrap("gettman","$latest");
  let result=callable.call()
    //send response
    callback({"res":result});
};
module.exports.myHandler = myHandler;

【问题分析】

出现10602的错误一般是因为AGCClient在Node.js中初始化一次后不会清除缓存,在后续测试时会出现重复初始化的情况便会报AGCClient已存在的错误,所以在初始化前做个判断,如果存在AGCClient实例便不再初始化。做了判断后该代码还存在另外几个问题,也在下图标注了出来:

cke_5035.png

【解决方案】

如果要在云函数中调用云函数,需要注意以下几点:

  1. 测试函数时AGCClient实例需要判断是否已经存在,不存在则初始化。
  2. var agcFunction = new AGCFunction(); 这个类传参应该是个字符串,或者为空,不能传agcClient对象
  3. call()需要异步。

改进后的函数代码如下:

const agconnect = require('@agconnect/common-server');
const { AGCFunction } = require("@hw-agconnect/function-server");
let path = require('path');
let credentialPath = path.join(__dirname, 'agc-apiclient.json');
let credential = agconnect.CredentialParser.toCredential(credentialPath);
let agcClient;
try {
  agcClient = agconnect.AGCClient.getInstance();
} catch {
  agconnect.AGCClient.initialize(credential);
  agcClient = agconnect.AGCClient.getInstance();
}
let myHandler = async function(event, context, callback, logger) {
  var agcFunction = new AGCFunction();
  let callable= agcFunction.wrap("test","$latest");
  let result = callable.call({}).then(res => {
    callback({"res":res});
  }).catch(error => {
    callback({"error":error});
  });
};
module.exports.myHandler = myHandler;

更多关于【Serverless】HarmonyOS 鸿蒙Next 云函数中调用云函数报错10602的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

找不到@agconnect/common-server这模块。

cke_2253.png

更多关于【Serverless】HarmonyOS 鸿蒙Next 云函数中调用云函数报错10602的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请问你解决了吗

没有的,提了工单也没解决,感觉云☁函数里调用其它云函数应该暂时不可行。

报错如下,导入不了云函数以外的模块。

cke_225.png

const agconnect = require(’@agconnect/common-server’); const { AGCFunction } = require("@hw-agconnect/function-server");

这两个包在测试云函数时,提示找不到相应模块,想问问最新的云函数2.0支持吗?有没有相关文档可以查询怎么使用吗?

好奇问问,如果想从现在的云函数,传参给被调用的云函数,那应该怎么写呢?

是读取Event的参数,传到AGCFunction吗?如下面

var agcFunction = new AGCFunction(event.year);

针对帖子标题中提到的HarmonyOS(鸿蒙)Next云函数中调用云函数报错10602的问题,这里提供可能的解决方案,不涉及Java或C语言内容。

报错10602通常指示某种资源限制或权限问题。在鸿蒙的云函数环境中,这种错误可能由以下几个原因引起:

  1. 权限配置不当:检查被调用的云函数是否具有被其他云函数调用的权限。在鸿蒙的云服务平台上,确保相关权限策略已正确配置。

  2. 资源配额超限:每个云函数账户或项目都有一定的资源使用配额,包括调用次数、执行时间等。检查是否已达到或超过这些配额限制。

  3. 网络或依赖问题:确保云函数间的网络调用畅通无阻,且所有依赖服务均正常运行。

  4. 代码错误:虽然不直接指向代码问题,但确认调用代码逻辑无误,参数传递正确,避免因代码错误间接导致权限或资源使用异常。

解决这类问题通常需要登录鸿蒙云服务平台,检查云函数的配置、权限设置及资源使用情况。根据具体错误信息调整配置或优化代码。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部