在事件处理中迭代列表

时间:2015-10-12 11:42:07

标签: esper cumulocity

我目前正在尝试通过脚本迭代事件处理中的ManagedObjects列表。 它应该检查列表中每个ManagedObject的条件,一旦它为真,就返回该对象。

这是我的剧本:

 create expression ManagedObject getCurrentDepot(position, listObjects) [ 
     for (i = 0; i <= listObjects.length; i++) { 
         var obj = listObjects[i]; 
         var distance = distance(position.lat, position.lng, obj.Geofence.lat, obj.Geofence.lng); 
         if (distance <= obj.radius ) { 
             depot; 
         } 
     } 
     null; 
 ];

我收到以下错误:

  

语句mytest中的错误:statement_2! :';'附近的语法不正确在第3栏第26栏

它抱怨这一行:

var obj = listObjects[i];

如何正确迭代列表?

2 个答案:

答案 0 :(得分:1)

最好的解决方案是不在表达式中循环,而是在事件处理本身。

create expression Boolean isInRange(position, element) [
     var distance = distance(position.lat, position.lng, element.Geofence.lat, obj.Geofence.lng); 
     if (distance <= element.radius ) { 
         true; 
     }
     false;
 ];

insert into MyStreamWithDepot
select
    event.listObjects.firstOf(element => isInRange(event.position, element) is true) as currentDepot
from InputEvent event;

您可以在此处查看“firstOf”方法的文档esper documentation

答案 1 :(得分:0)

尝试

var distance;
listObjects.forEach(function(obj) {          
        distance  = distance(position.lat, position.lng, obj.Geofence.lat, obj.Geofence.lng); 
         if (distance <= obj.radius ) { 
             depot; 
         } 
     });