deepstream.io List的subscribe()未触发:addEntry无法同步列表变更
解决deepstream List.addEntry()无法跨客户端同步的问题
我之前碰到过一模一样的情况!在使用deepstream.io 3.1.1和deepstream.io-client-js 2.3.0的组合时,确实存在list.addEntry()方法无法同步列表更新的问题:调用这个方法只会修改当前客户端本地的List实例,不会触发其他客户端的变更通知,必须改用list.setEntries()才能让所有订阅该List的客户端感知到变化。
问题场景还原
- 客户端1和客户端2完成连接与认证后,都执行以下代码获取同一个List:
const cars = deepstreamClient.record.getList('cars/all') - 客户端2订阅List的变更:
cars.subscribe(console.log) - 当客户端1调用
cars.setEntries(['porche','ferrari','bmw'])时,客户端2会正常打印更新后的完整列表;但如果调用cars.addEntry('audi'),只有客户端1本地的List会新增元素,客户端2完全收不到任何通知,也不会有回调触发。
临时解决方案
如果暂时无法升级版本,你可以通过手动获取当前条目、添加新元素后调用setEntries()的方式来替代addEntry():
// 客户端1添加新条目的正确姿势 const currentEntries = cars.getEntries() currentEntries.push('audi') cars.setEntries(currentEntries)
这样调用后,客户端2的订阅回调会被正常触发,打印包含新元素的完整列表。
额外说明
这个问题是该特定版本组合的已知问题,如果你后续把deepstream服务端升级到4.x及以上版本,同时将客户端升级到3.x及以上版本,addEntry()方法应该就能正常实现跨客户端同步了。
内容的提问来源于stack exchange,提问作者zra
相关产品推荐
相关产品推荐

