我有一个Node.js Lambda函数,它将记录插入到DynamoDB中。在插入时,我在一个名为createdAt的字段下使用new Date().getTime()方法标记记录,如下所示:
const timestamp = new Date().getTime().toString();然后在灯笼里:
const data = {
...JSON.parse(event.body),
purchased: false,
_id: uuid.v4(),
createdAt: timestamp,
updatedAt: timestamp,
};在检索数据时,我正在执行扫描操作,然后使用JS数组排序方法手动对返回的记录数组进行排序,以便按createdAt的降序顺序排序结果(即最新记录应该出现在顶部):
//sort data in descending order of createdAt
data = data.sort((a, b) => {
let aDate = Number(a.createdAt);
let bDate = Number(b.createdAt);
return bDate - aDate;
});现在,在本地主机上测试时,这很好,但是在AWS上执行代码时,我注意到了一个奇怪的问题--多条记录彼此间隔几秒钟,时间戳相同!--这影响了记录的排序,并返回了一个未排序的随机排序列表。有人能告诉我为什么会这样吗?

发布于 2021-09-17 07:59:46
问题是我在lambda函数之外创建了timestamp。这意味着timestamp变量将被重用,因为Fun广子的实例将被保留以处理后续的请求(与建议在lambda之外创建数据库连接的原因相同)。这就是为什么在仅隔几秒钟创建的多个记录上观察到相同的时间戳的原因。
解决方案-在lambda函数中创建时间戳。
exports.handler = async (event) => {
const timestamp = new Date().getTime().toString();
const data = {
...JSON.parse(event.body),
purchased: false,
_id: uuid.v4(),
createdAt: timestamp,
updatedAt: timestamp,
};
// rest of the code goes here.....
};https://stackoverflow.com/questions/69218684
复制相似问题