【Serverless】雲函數中調用雲函數報錯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));

var 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;

 欲瞭解更多更全技術文章,歡迎訪問https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章