AWS lambda异步数据库(Firestore)查询,为什么返回Promise {<pending>}

时间:2019-12-22 10:15:39

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

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{<pending>}
我的问题是
1. Lambda对于此异步功能有什么期望;它应该返回什么?
2. Promise{<pending>}表示未解决的承诺,但是在代码中,res最终将是一个值/对象,这就是为什么它仍然说未解决的原因。 3.我们可以查找哪些不错的参考?

谢谢。

1 个答案:

答案 0 :(得分:0)

pic

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

我在本地尝试了上面的代码,它在0.05s内完成,并且在lambda上达到了3s时间限制,所以我认为这应该是我的诺言的错误。但实际上,该诺言是正确的,并且由于尚未解决外部功能,因此它应该是未决的诺言。由于内存太少(128mb),所以速度很慢。给它更多的内存,错误就会消失。