我是有两个函数,分别是函数A和函数B 我在函数A里面异步调用了函数B,并且设置了X-Fc-Stateful-Async-Invocation-Id。
但是我在函数A里面只调用了一次B,结果B的请求列表里面就一直在更新调用信息
可能是因为你在异步调用函数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的请求列表一直在更新的问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。