- 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 возвращается?"
Спросил у меня утром знакомый и отправил этот код.
Так вроде обычный CPS.
Все, что отсюда видно читателю, так это то, что вторая строчка не нужна, все остальное - не понятно.
тока нахуя
Прикол в другом, client.get(inc) inc в этой ситуации будет всегда сылаться на последнее значение переменной (100).
От того ему и выводится одно и то же значение. Соответственно, нужно юзать замыкания и код станет выглядеть так:
Зачем вам нужна переменная key?
Зачем вы создаете 100 одинаковых функций, два раза?
Во втором случае еще и зачемто перезаписываете локальное связывание для inc, что делает код более запутанным...
С виду этот код собирался сделать что-то типа массива на 100 рандомально созданных чисел. Но я не уверен в этом потому что цель достигается каким-то неимоверно сложным способом...
Потому и:
>Зачем вам нужна переменная key?
>Зачем вы создаете 100 одинаковых функций
Во втором случае, вторая функция, нужна для создания замыкания и сохранения переменной inc.
Второго случая тоже могло бы не быть, если бы, например, можно было вызвать самую внутреннюю функцию с аргументом inc (почему val не используется?). Но если по каким-то причинам нельзя, то проще сохранить значение в какой-нибудь хеш и использовать одну функцию вместо ста для извлечения значения из хеша. То что здесь происходит, это как забивание гвоздя в стенку передвижением стенки к молотку посредством бульдозера...
И еще раз - это синтетический пример, на котором автор разбирается с set и get. В реальности никто set и get в одну функцию упихивать не станет.
Видимо, люди учаться работать с Redis, и это один из первых тестов.
P.S. В который раз убеждаюсь в том, что надо рефрешить страничку, перед тем как писать ответ.
Единственный момент - каллбак на get принимает два аргумента (err, val)
Ну есть такое... в ЖС считаю себя нубом. Ну и просто не люблю вложения коллбеков больше 1-2 уровней... Даже когда писал небольшой проектик c ajax с использованием jQuery, в лямбды выкидывал только совсем тривиальные обработчики, а более сложные - в функции. Привычка, что сказать...
> Единственный момент - каллбак на get принимает два аргумента (err, val)
Ну чего не знал, того не знал ;) Переписывал с оригинала.
P.S. А у set() ошибка не прилетает?