# 每个 循环处理列表中的每一项。
是循环的一种,另外一种循环模块是“重复”。 ![image.png](https://cdn.nlark.com/yuque/0/2020/png/272392/1589530743593-4aef6b7a-784d-46d1-8d77-213807887a7b.png#averageHue=%23fcfbfb&height=331&id=nVU20&originHeight=662&originWidth=1196&originalType=binary&ratio=1&rotation=0&showTitle=false&size=54525&status=done&style=none&title=&width=598)
演示视频链接:[在组合动作中使用循环](https://www.bilibili.com/video/BV1ty4y1S7AK) # 参数 【列表】要循环处理的列表变量。
【使用多线程】(1.7.4中增加)使用多线程同步处理列表里的项。基本的处理过程为: - 循环处理列表中的每一项: - 将项的值和计数 赋值到设定的变量; - 开启一个新的线程执行循环中的子步骤;在这些步骤中,应该立即读取保存项值的变量(如上面截图中的text),否则50ms后循环到下一个项的时候,这个变量的内容就会被覆盖为下一项的值了。 - 等待50ms(为了让线程中的代码可以读取保存项值的变量); - 处理下一项; 【为线程创建独立上下文】(1.39.11) 为每个线程创建一个独立上下文,避免多线程时数据冲突(参考[问题](https://getquicker.net/QA/Question/20294))。 - 每个线程中读取到的“项”和“计数”的值都是准确的。 - 每个线程步骤中,对值类型的变量(如文本、数字)的读写,是操作变量在该线程中的副本,线程之间互不影响,不会更新到动作本身的变量中。(因此,如果步骤比较简单可以不需要再封装子程序了) - 对于以引用方式传递的词典、列表等对象类型,当修改它们的内容时(如为词典增加键值对、更新列表的某一项等),会在整个动作范围内生效。 ## 多线程使用提示 - 警告!在多线程运行的代码中更新相同的变量可能会产生冲突。 - 为避免log格式混乱,同步执行时调试运行log会被关闭。 - 一些跳转处理将会失效(如停止动作/停止循环等,具体需测试)。 - 可能存在其他潜在问题,请多测试动作。 # 输出 输出项将在每次循环时更新。 所以在循环内部,每次运行取到的变量是这次循环所对应的值。
【项】本次循环所要处理的列表元素的值。
【计数】当前是第几次循环,从0开始。 # 示例 - [示例:每个](https://getquicker.net/sharedaction?code=d5470b3f-cae1-4388-75b8-08d709af9122) - [示例:多线程测试(需1.7.4版本)](https://getquicker.net/sharedaction?code=1aefbbd1-cca2-42e6-c4e0-08d7f7cf8b53) # 更新说明 - 20230828 增加【为线程创建独立上下文】参数。