- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
for (var inc = 0; inc < 100; inc++){
var key = Math.random();
client.set(inc, Math.random(), function(){
client.get(inc, function(val){
console.log(inc);
})
});
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+157
for (var inc = 0; inc < 100; inc++){
var key = Math.random();
client.set(inc, Math.random(), function(){
client.get(inc, function(val){
console.log(inc);
})
});
}
"Какого хуя мне 100 раз по 100 возвращается?"
Спросил у меня утром знакомый и отправил этот код.
kipar 23.07.2012 12:57 # −2
Так вроде обычный CPS.
wvxvw 23.07.2012 13:37 # +2
Все, что отсюда видно читателю, так это то, что вторая строчка не нужна, все остальное - не понятно.
SmackMyBitchUp 23.07.2012 13:45 # 0
тока нахуя
хуита 23.07.2012 14:21 # +2
Прикол в другом, client.get(inc) inc в этой ситуации будет всегда сылаться на последнее значение переменной (100).
От того ему и выводится одно и то же значение. Соответственно, нужно юзать замыкания и код станет выглядеть так:
wvxvw 23.07.2012 15:05 # +1
Зачем вам нужна переменная key?
Зачем вы создаете 100 одинаковых функций, два раза?
Во втором случае еще и зачемто перезаписываете локальное связывание для inc, что делает код более запутанным...
С виду этот код собирался сделать что-то типа массива на 100 рандомально созданных чисел. Но я не уверен в этом потому что цель достигается каким-то неимоверно сложным способом...
хуита 23.07.2012 15:11 # 0
Потому и:
>Зачем вам нужна переменная key?
>Зачем вы создаете 100 одинаковых функций
Во втором случае, вторая функция, нужна для создания замыкания и сохранения переменной inc.
wvxvw 23.07.2012 15:34 # 0
Второго случая тоже могло бы не быть, если бы, например, можно было вызвать самую внутреннюю функцию с аргументом inc (почему val не используется?). Но если по каким-то причинам нельзя, то проще сохранить значение в какой-нибудь хеш и использовать одну функцию вместо ста для извлечения значения из хеша. То что здесь происходит, это как забивание гвоздя в стенку передвижением стенки к молотку посредством бульдозера...
bormand 23.07.2012 15:55 # 0
И еще раз - это синтетический пример, на котором автор разбирается с set и get. В реальности никто set и get в одну функцию упихивать не станет.
roman-kashitsyn 23.07.2012 15:12 # +1
Видимо, люди учаться работать с Redis, и это один из первых тестов.
bormand 23.07.2012 15:18 # 0
P.S. В который раз убеждаюсь в том, что надо рефрешить страничку, перед тем как писать ответ.
хуита 23.07.2012 15:30 # +1
Единственный момент - каллбак на get принимает два аргумента (err, val)
bormand 23.07.2012 15:37 # 0
Ну есть такое... в ЖС считаю себя нубом. Ну и просто не люблю вложения коллбеков больше 1-2 уровней... Даже когда писал небольшой проектик c ajax с использованием jQuery, в лямбды выкидывал только совсем тривиальные обработчики, а более сложные - в функции. Привычка, что сказать...
> Единственный момент - каллбак на get принимает два аргумента (err, val)
Ну чего не знал, того не знал ;) Переписывал с оригинала.
P.S. А у set() ошибка не прилетает?
roman-kashitsyn 23.07.2012 15:08 # +1
oneguy 28.07.2012 00:06 # +1