# 包含循环的异步函数在JS后端产生无限循环

**URL:** <https://taolun.moonbitlang.com/t/topic/1400>\
**Category:** 欢迎\
**Created:** [2026 年3 月 10 日 10:54 UTC](https://taolun.moonbitlang.com/t/topic/1400 "2026-03-10T10:54:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

作者： ![sennenki](https://taolun.moonbitlang.com/letter_avatar_proxy/v4/letter/s/e56c9b/32.png) [@sennenki](https://taolun.moonbitlang.com/u/sennenki)\
发布日期： [2026 年3 月 10 日 10:54 UTC](https://taolun.moonbitlang.com/t/topic/1400/1 "2026-03-10T10:54:22Z")

</div>

![image](https://taolun.moonbitlang.com/uploads/default/original/1X/08d20e11e4fa277a6c584c4664c4b46fe20444ea.png)  
如图, `foreach_async_and_sync`函数应该分别以异步和同步高阶函数遍历`xs`中的内容然后退出.

---

<div class="post-metadata">

作者： ![sennenki](https://taolun.moonbitlang.com/letter_avatar_proxy/v4/letter/s/e56c9b/32.png) [@sennenki](https://taolun.moonbitlang.com/u/sennenki)\
发布日期： [2026 年3 月 10 日 10:55 UTC](https://taolun.moonbitlang.com/t/topic/1400/2 "2026-03-10T10:55:48Z")

</div>

在JS后端上, 它大致生成如下代码:

 ![3ccb585b-8d63-4003-bfd2-fe302e1ae119](https://taolun.moonbitlang.com/uploads/default/original/1X/249683810af1366ee0054b3abb8d15e5577b000b.jpeg)  
可以看到, 第22行的`break`会从`switch`在跳出, 然后在不更新`_tmp`的情况下重新进入下一轮`while`循环, 造成程序不停机.

---

<div class="post-metadata">

作者： ![sennenki](https://taolun.moonbitlang.com/letter_avatar_proxy/v4/letter/s/e56c9b/32.png) [@sennenki](https://taolun.moonbitlang.com/u/sennenki)\
发布日期： [2026 年3 月 10 日 10:57 UTC](https://taolun.moonbitlang.com/t/topic/1400/3 "2026-03-10T10:57:01Z")

</div>

而假如在函数末尾加如其他代码(比如一行`println("")`), 函数生成如下代码:

 ![d34e9fe6-29af-44cb-91ab-1e3bf6c20f05](https://taolun.moonbitlang.com/uploads/default/original/1X/9493181c0aa2be4ea1f47fd24bfea50deb90ee11.jpeg)  
第22行的`break`被替换为`return`, 函数正常退出.

---

<div class="post-metadata">

作者： ![hackwaly](https://taolun.moonbitlang.com/user_avatar/taolun.moonbitlang.com/hackwaly/32/60_2.png) [@hackwaly](https://taolun.moonbitlang.com/u/hackwaly)\
发布日期： [2026 年3 月 11 日 15:15 UTC](https://taolun.moonbitlang.com/t/topic/1400/4 "2026-03-11T15:15:52Z")

</div>

这个 bug 应该在最新版本 moon 0.1.20260309 (f21b520 2026-03-09) 里已经修复了
