gpt4 book ai didi

javascript - setTimeout 按值传递数组(在咖啡中)

转载 作者:行者123 更新时间:2023-12-03 11:20:37 25 4
gpt4 key购买 nike

很抱歉发布一个非常常见的问题,但我很难将数组按值正确传递给 setTimeout 函数:

for exi in [1..5]
# I just re-create an array at each iteration
mdopkt = [
exi + 5,
]


delay = (ms, func) -> setTimeout func, ms

sendpkt = (st) ->
arg = EJSON.stringify st
root.zmqPush.send arg

md = mdopkt.slice(0)
foo = -> sendpkt md
delay 1000, foo

上面的代码不起作用,因为“mdopkt”数组在延迟结束之前被更改。 zmqPush 仅使用包含相同 5+5 值的 mdopkt 执行 5 次。

我该如何解决这个问题?

谢谢

最佳答案

问题是您尝试在同步 for 循环内执行异步代码,因此当第一个异步调用实际发生时,您的 for 循环已经完成执行。另一个问题是您在每次迭代中重新定义 exi、mdopktmd` 变量。

要解决此问题,您应该创建一个闭包,在 CoffeScript 中有两种常见的方法可以实现此目的。

使用Array::forEach而不是 for 循环

[1..5].forEach (exi) ->
# your code

使用do keyword

for exi in [1..5] then do (exi) ->
# your code

关于javascript - setTimeout 按值传递数组(在咖啡中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com