setTimeout 按值传递数组(在咖啡中)
setTimeout pass array by value (in coffee)
很抱歉发布一个一定很常见的问题,但我很难按值正确将数组传递给 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 次,mdopkt 包含相同的 5+5 值。
我该如何解决这个问题?
谢谢
问题是您正在尝试在同步for
循环中执行异步代码,因此当第一次异步调用实际发生时,您的 for 循环已经完成了执行。另一个问题是,您在每次迭代中重新定义exi,
mdopkt and
md' 变量。
要解决此问题,您应该创建一个闭包,并且在 CoffeScript 中有两种常用方法可以做到这一点。
使用Array::forEach
而不是for
循环
[1..5].forEach (exi) ->
# your code
使用do
关键字
for exi in [1..5] then do (exi) ->
# your code
相关文章:
- 如何将值传递到上一个html页面
- 在函数中按值传递对象
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- Javascript :按值传递字符串
- setTimeout 按值传递数组(在咖啡中)
- JavaScript 处理参数按值传递
- 为什么这个数组是通过引用而不是按值传递的,我该如何改变它
- 按顺序将数组值传递给数据库
- 按回车键或按按钮将输入值传递给控制器
- Javascript函数的所有参数都只按值传递
- Javascript数组按值传递不起作用
- 将字符串传递给函数是按值复制还是按引用传递
- jQuery事件绑定按值传递
- Web Workers——如果对象是按值传递的,内存使用量会翻倍吗?
- 是JavaScript按引用传递或按值传递
- React:如果值是按值传递的,那么为什么有必要拥有不可变的道具呢
- 变量赋值 - Javascript: array1[0] = array2[0];这是按值传递还是按引用传递
- 我想按值传递数组,但似乎它是通过引用传递的,数组上的 .map 操作没有给出预期的结果
- 按值传递JavaScript数组
- 将按引用调用作为按值调用传递