gpt4 book ai didi

node.js - 带有 Async/Await 的 NodeJS 中类似分类帐的顺序条目

转载 作者:行者123 更新时间:2023-12-03 22:20:48 27 4
gpt4 key购买 nike

我正在设计一个会计/簿记应用程序,我的表格有以下列 -

  • 事务 ID
  • 交易详情
  • 数量
  • 期末余额

  • 所有的事务都通过一个队列一一馈送给 NodeJS 函数
    但是,在保存每笔交易时,我必须获取前一笔交易以获得最后的期末余额并将当前交易金额添加到相同的金额以获得新的期末余额
    但是我必须使用 async/await 来获取先前的事务,因此事件循环在几毫秒内是空闲的,在此期间函数从用户那里接收新的事务事件。这会导致大量的数据不一致,因为有时会插入具有相同期末余额的 2 行。
    const prevTransaction = await Transaction.findOne({
    where: { userId },
    order: [['createdAt', 'DESC']]
    })

    await Transaction.create({
    userId,
    amount,
    closingBalance: prevTransaction ? prevTransaction.closingBalance + amount : amount,
    transactionDate
    })
    现在,如果系统批量接收大量事件,那么由于 GET 和 INSERT 查询之间的差距,数据可能会出现一些不一致。
    在某些情况下,这是插入的数据


    ID
    数量
    结余


    1
    20
    20

    2
    20
    40

    3
    20
    40

    4
    10
    50

    5
    20
    60


    理想情况下应该是 -


    ID
    数量
    结余


    1
    20
    20

    2
    20
    40

    3
    20
    60

    4
    10
    70

    5
    20
    90


    我可以调整上面的代码以获得顺序效果的任何特定方法?
    这就是我使用 BullJS 队列的原因,以便逐一处理事务。但是由于 2 个 await 调用,此问题仍然存在。

    最佳答案

    如果正在处理任何事务并在插入事务后恢复它,我通过暂停作业队列暂时解决了这个问题 - link
    很想听听任何替代方法,因为这种方法依赖于第三方库。

    关于node.js - 带有 Async/Await 的 NodeJS 中类似分类帐的顺序条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65247039/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com