首页 > 解决方案 > 为什么 settimeout 在我的 aws lambda 中导致 502?

问题描述

在节点 10.x lambda 上运行。如果我删除延迟承诺,我的所有 fetch 调用都会按预期工作。记录 fetch 回调不会导致任何结果。超时似乎只是停止了 lambda。我错过了什么吗?也许 lambdas 运行 nodeJS 的方式是独一无二的?

以下是我的代码的简化版本。

import fetch from "node-fetch";

const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));

export const handler = async (): Promise<any> => {
    try {
        const publishedEvents = [
            'event 1',
            'event 2',
            'event 3'
        ]

        for (const publishEvent of publishedEvents) {
          await fetch('url', { method: 'POST', body: publishEvent });
          await delay(60000);
        }

        return {
            statusCode: 200,
            body: 'Published all Events'
        };
    } catch (e) {
        return {
            statusCode: 400,
            body: 'Failed Call'
        }
    }
};

标签: node.jsamazon-web-servicesaws-lambdaasync-awaitsettimeout

解决方案


根据评论。

问题是 lambda 函数的执行超时太短。解决方案是增加它。


推荐阅读