如何在 云函数A 中异步调用 云函数B,其中B涉及延时操作。 云函数A 调用 B 后,立即返回结果。无需等待 B 执行完毕。
开发者您好,目前云函数还不提供异步调用模式,但是您可以通过以下方式实现类似效果。
首先定义函数B,执行一个五秒的任务:
module.exports = async (ctx) => {
ctx.logger.info(`B running: ${Date.now()}`)
await sleep(5000)
ctx.logger.info(`B finished: ${Date.now()}`)
};
const sleep = ms => new Promise(r => setTimeout(r, ms));
定义函数A,在A中我们需要拉起函数B,但是不关注B的运行结果:
module.exports = async (ctx) => {
ctx.logger.info(`A start: ${Date.now()}`)
// 拉起函数B,注意前面不加 await
ctx.mpserverless.function.invoke('functionB', {x: 1, y:2})
// 这一步是必须的,因为需要等待拉起函数B的请求发出去
await sleep(2000)
ctx.logger.info(`A end: ${Date.now()}`)
};
const sleep = ms => new Promise(r => setTimeout(r, ms));
值得注意的是,我们在A中异步拉起函数B之后,加了个固定时间等待,这是因为如果不加等待,函数A运行结束会立即冻结,此时拉起函数B的请求可能还来不及发送出去。
最后,开发者需要知道凡是从SDK发起的函数运行请求最多只支持10S运行时间,如果您需要函数运行更长时间,可以使用定时任务来触发运行函数,此时最多支持600S运行时间。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。