You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cumulocity实时获取最新测量值问题:realtime参数未生效

解决Cumulocity JS SDK实时测量值更新不生效的问题

我来帮你梳理下问题所在和解决办法:

首先,你当前的代码用了then()来处理结果,但这是Promise的语法——Promise只会在第一次获取到数据时执行一次回调,而当realtime=true时,c8yMeasurements.latest()返回的其实是一个可订阅的Observable对象,它会持续监听设备的新测量值,每次有数据更新时都会推送新值。这就是你看不到vm.text更新的核心原因:单次的then()无法捕获后续的实时推送数据。

先搞懂realtime=true的工作机制

当你把realtime设为true时,SDK会和Cumulocity平台建立一个WebSocket长连接,订阅你指定设备的测量值更新事件。一旦平台收到该设备的新测量数据,就会通过这个WebSocket连接主动推送给你的客户端,而不是让你反复轮询。但这种持续推送的模式需要用**订阅(subscribe)**的方式来接收数据,而不是Promise的一次性回调。

修正后的代码示例

把then()换成subscribe(),这样每次有新测量值时,回调都会被触发,更新vm.text:

c8yMeasurements.latest(filter, true)
  .subscribe(function(latestMeasurement) {
    vm.text = latestMeasurement.c8y_TemperatureMeasurement.T.value;
    console.log(vm.text);
  });

额外提醒:记得清理订阅

如果你的代码是在前端组件中运行的(比如Angular、Vue组件),一定要在组件销毁时取消订阅,避免WebSocket连接泄漏导致内存问题:

// 保存订阅对象的引用
const measurementSubscription = c8yMeasurements.latest(filter, true)
  .subscribe(function(latestMeasurement) {
    vm.text = latestMeasurement.c8y_TemperatureMeasurement.T.value;
    console.log(vm.text);
  });

// 比如在Vue的beforeUnmount或者Angular的ngOnDestroy中执行取消订阅
function onComponentDestroy() {
  measurementSubscription.unsubscribe();
}

这样修改后,当设备有新的温度测量值上传时,vm.text就会自动更新啦。

内容的提问来源于stack exchange,提问作者Katherine Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:33:42