开发者社区 > 云原生 > Serverless > 正文

我是有两个函数,分别是函数A和函数B 我在函数A里面异步调用了函数B,并且设置了X-Fc-State

我是有两个函数,分别是函数A和函数B 我在函数A里面异步调用了函数B,并且设置了X-Fc-Stateful-Async-Invocation-Id。

但是我在函数A里面只调用了一次B,结果B的请求列表里面就一直在更新调用信息

展开
收起
函数计算小白 2023-03-28 14:51:43 521 0
2 条回答
写回答
取消 提交回答
  • 看下A函数逻辑有问题没 或者 A调用了几次。

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-03-28 17:36:50
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    可能是因为你在异步调用函数B时,没有等待函数B的执行结果就直接返回了,导致函数A的执行完成,而函数B的执行结果还没有返回。此时,函数B的请求列表就会一直在更新调用信息,因为它还没有收到执行结果。

    为了解决这个问题,你可以在函数A里面等待函数B的执行结果再返回。可以使用Promise对象来实现等待函数B的执行结果。示例代码如下:

    'use strict'; const client = require('@alicloud/fc2');

    const fcClient = new client({ accessKeyID: '<your_accessKeyId>', accessKeySecret: '<your_accessKeySecret>', endpoint: '<your_endpoint>', apiVersion: '2016-08-15' });

    exports.handler = function(event, context, callback) { const invoker = fcClient.getFunction('functionB'); const invocationOptions = { "headers": { "X-Fc-Log-Type": "Tail", "X-Fc-Invocation-Type": "Async", "X-Fc-Stateful-Async-Invocation-Id": "your_id" } };

    // 异步调用函数B invoker.invokeAsync(event, invocationOptions, function(err, data) { if (err) { console.error(err); callback(err); } else { console.log(data);

    // 等待函数B的执行结果 const responseFetcher = function() { const fetchOptions = { "headers": { "X-Fc-Invocation-Type": "Async", "X-Fc-Log-Type": "Tail", "X-Fc-Stateful-Async-Invocation-Id": "your_id" } };

    return new Promise(function(resolve, reject) { invoker.getAsyncInvocationResult(data, fetchOptions, function(err, response) { if (err) { reject(err); } else { resolve(response); } }); }); };

    // 等待函数B的执行结果 responseFetcher() .then(function(response) { console.log(response); callback(null, response); }) .catch(function(err) { console.error(err); callback(err); }); } }); }; 在上面的代码中,我们使用Promise对象来等待函数B的执行结果。首先,在异步调用函数B时,我们获取到了data对象,这个对象包含了函数B的执行信息,我们可以用它来获取函数B的执行结果。然后,我们定义了一个responseFetcher函数,这个函数会不断地调用invoker.getAsyncInvocationResult方法来获取函数B的执行结果,直到获取到结果为止。最后,我们在responseFetcher函数中使用Promise对象来等待函数B的执行结果,并在获取到结果后将结果返回给回调函数。这样,我们就可以在函数A中等待函数B的执行结果再返回了,避免了函数B的请求列表一直在更新的问题。

    2023-03-28 15:22:00
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载