
fn函数执行后,遇到await后中断,函数的状态被保存在内存中,等待Promise结束后继续执行。
因为clearTimeout,Promise永远不会结束了,那是不是中断的函数状态会一直在内存中?
比如一个方块,我在一个async函数里,让它先用tween往左移动,再用定时器等待,再用tween往上移动。
如果要destroy这个方块,我就会把tween和定时器都清除掉,async函数就停在那了,我怕这样会内存泄露,就问了这个问题。

fn函数执行后,遇到await后中断,函数的状态被保存在内存中,等待Promise结束后继续执行。
因为clearTimeout,Promise永远不会结束了,那是不是中断的函数状态会一直在内存中?
比如一个方块,我在一个async函数里,让它先用tween往左移动,再用定时器等待,再用tween往上移动。
如果要destroy这个方块,我就会把tween和定时器都清除掉,async函数就停在那了,我怕这样会内存泄露,就问了这个问题。
不会,不用担心
代码片段会始终被轮询,内部的局部变量也会被保留。
但大部分情况下我们不考虑这种问题,因为我们大部分时候很清楚自己写Promise是为了什么,极小部分异常情况直接无视。少一点焦虑!
续:
使用Promise还是很香的,但是也不能滥用,始终记住一个原则:
不能100%保证的事情最好不要做承诺!
比如定时会被取消,就不要去等定时器
又比如寻路会被中断,那就不要承诺寻路会有结果
你这个clearTimeout 写在那 有作用吗
这肯定泄露了,Promise一直没有被释放
最好不要用setTimeout,因为这玩意在进入后台的时间也会算进去,最好就是用引擎的schedule
不会内存泄漏
只要没有持有resolve/reject的引用,promise对象就会被回收。当调用clearTimeout后,内部的resolve也不再被持有引用,promise对象也会在GC时回收。
受教了,只要不再持有 resolve/reject 引用 也不持有 Promise 实例,就不会造成内存泄露