2

当我尝试#foreach在 VTL 响应模板中返回一个循环时,即使我有 116 个项目,它也不会返回超过 101 个。为了测试,我创建了两个字段itemsitemCount运行了相同的 ES 查询。

VTL 响应映射items

[
  #foreach($entry in $context.result)
    #if( $velocityCount > 1 ) , #end
    $util.toJson($entry.get("_source"))
  #end
]

VTL 响应映射itemCount

$context.result.size()

似乎 appsync 对 foreach 循环设置了限制(参考:http://people.apache.org/~henning/velocity/html/ch05s04.html)。

4

2 回答 2

4

我们刚刚将此限制更新为 1000,该限制已在AppSync 限制页面中更新。

于 2018-04-10T19:14:03.023 回答
0

绕过 AppSync 和 API Gateway 设置的任意速度限制的一种方法是通过在 1000 个存储桶中进行分区directive.foreach.maxloops = 1000来打破循环。这是一个工作示例:foreach

## Partition to get around foreach iteration limit
#set($partition_size = 1000)
#set($max_partition_index = $list.size()/$partition_size)
#foreach($partition_index in [0..$max_partition_index])
  #set($start_index = $partition_index * $partition_size)
  #if($partition_index == $max_partition_index)
    ## Last partition
    #set($end_index = $list.size() - 1)
  #else
    #set($end_index = (($partition_index + 1) * $partition_size) - 1)
  #end

  #foreach($index in [$start_index..$end_index])
    #if($index != 0),#end
    "$list[$index].S"
  #end
#end
于 2022-02-25T05:10:47.077 回答