在Node中处理stream,操作依赖于asynchronous调用

我正在尝试编写一个节点程序,它使用xml-stream将数据stream合并并将其写入数据库(使用mongoose)。 我在解决如何进行整合时遇到问题,因为当我处理下一条logging时,数据可能没有到达数据库。 我正在尝试这样做:

on order data being read from stream look to see if customer exists on mongodb collection if customer exists add the order to the document else create the customer record with just this order save the customer 

我的问题是,客户的两个“附近”订单会导致重复的客户logging被写入,因为第一个订单在第二个订单检查之前没有被写入。

理论上我认为我可以通过暂停xml-stream来解决问题,但是有一个阻止我这样做的bug。

不知道这是最好的select,但使用asynchronous 队列是我最终做的。

与此同时,我添加了一个允许暂停的xml-stream (这是我用来处理stream的)的pull请求。

在来自数据stream的数据中,客户对象中是否有独特的字段? 您可以为您的mongoose模式添加一个唯一的限制,以防止在数据库级别重复。

创build新客户时,添加一些回退逻辑来处理您尝试创build客户的情况,但同一客户是由另一个保存创build的。 发生这种情况时,请再次尝试保存,但是首先先取出其他客户,然后将订单添加到提取的客户凭证中