a = ["1","2","3"]
square = (i,cb)->
i = parseInt(i)
setTimeout()->cb null,i*i,100
for i in a
square i,(err,result)->
console.log i + " " + result
output:
3 1
3 4
3 9
expected:
1 1
2 4
3 9
если удалить setTimeout Я могу получить ожидаемый результат.переменная javascript, измененная в async обратном вызове
или написать как этот
for i in a
((i)->
square i,(err,result)->
console.log i + " " + result
)(i)
Является ли это ошибка Javascript?
Является ли это Java-код? вы можете создать скрипку http://jsfiddle.net? – gurvinder372
Что это? CoffeeScript, машинопись? Это не JavaScript. – Andy
Этот вывод не является ошибкой, как работает async. К моменту запуска ваших вызовов таймаута цикл for уже завершен. Поэтому 'i' содержит последнее значение, используемое в цикле, в этом случае 3, поэтому каждый раз выводится 3. –