【问题标题】:AWS lambda async db (Firestore) query, why returns Promise{<pending>}AWS lambda async db (Firestore) 查询,为什么返回 Promise{<pending>}
【发布时间】:2019-12-23 06:46:25
【问题描述】:
var db = admin.firestore();

exports.handler = async (event) => {
    let res = await db.collection(`apps/${event.app_id}/whitelist`).doc(event.ip).set({
        ip: event.ip
    }).then(() => {
        return {
            statusCode: 200,
            body: {
                message: 'success'
            }
        };
    }).catch(() => {
        return {
            statusCode: 400,
            body: {
                message: 'failed'
            }
        };
    });
    return res;
};

此代码将导致 Lambda 超时,console.log(exports.handler(event)) 将打印 Promise{&lt;pending&gt;}
我的问题是
1. Lambda 对这个异步函数有什么期望;它应该返回什么?
2. Promise{&lt;pending&gt;} 表示未解析的promise,但在代码中,res 最终将是一个值/对象,那么为什么它仍然说未解析。
3. 我们可以查找哪些不错的参考资料?

谢谢。

【问题讨论】:

    标签: node.js async-await aws-lambda google-cloud-firestore


    【解决方案1】:

    pic

    伙计们...只需为您的 lambda 分配更多内存。

    我在本地尝试了上面的代码,它在0.05s内完成,并且在lambda上达到了3s的时间限制,所以我认为这应该是我的promise的错误。但实际上,promise 是正确的,它应该是一个待处理的 promise,因为外部函数从未被解析。它很慢,因为它的内存太少(128mb)。给它更多内存,错误就会消失。

    【讨论】:

    • @Charles..你能详细说明一下吗?
    • 你是怎么分配内存的?
    • @MukulSharma 在您的 AWS Lambda 控制台中,如图所示。
    猜你喜欢
    • 2020-11-29
    • 2020-07-25
    • 1970-01-01
    • 2021-09-10
    • 2021-01-03
    • 1970-01-01
    • 2020-05-20
    • 2019-05-28
    相关资源
    最近更新 更多