- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
function loading() {
$('#close').hide(function() {
$('#loading').show(function () {
setTimeout(function(){
$('#loading2').show(function() {
setTimeout(function(){
$('#loading3').show(function () {
setTimeout(function(){
$('#vk').show(function() {
setTimeout(function(){
$('#odn').show(function() {
setTimeout(function(){
$('#fb').show(function() {
setTimeout(function(){
$('#tw').show(function () {
$('#geo').show();
setTimeout(function(){
payment();
},1300);
});
},1600);
});
},1700);
});
},1400);
});
},1600);
});
},1900);
});
},1600);
});
});
}
Из исходного кода сайта, "раскрывающего" анонимов на аск.фм
> прекрасного языка
прекрасный язык, мне очень нравится
> фор нормальный
фор нормальный
> типы не туда приводятся
Инт неявно приводится к даблу - пожалуй, единственная проблема. Возникает она, когда начинаешь использовать жс не по назначению вместо сишки в погоне за перфомансом. В этом случае следует начать спокойно дышать, выбросить из головы богомерзкие мысли и взять более уместный язык.
Удваиваю.
Вот пусть борманд первый и бросает на нём писать.
На JS то? Их использовние же выглядеть будет как говно не меньше чем у топикстартера
Расчет на то, что у юзеров отключены ники?
Посмотрите на главную... Зачем Вы их созвали? :)
Циклов там дохуя:
for (a in b)
for each (a in b)
for (a of b)
Вот только первый - неюзабельное говно, второй успели объявить устаревшим до его внедрения, а третий пока только в огнелисе ;)
for each (a in b)
SyntaxError
for (a of b)
SyntaxError
Цикл for там ровно 1 (один).
for (var a=0;a<n;++a){...}
Ну толсто же... В новых фф, к примеру, они работают: > Цикл for там ровно 1 (один)
Вменяемо работающий и кроссплатформенный цикл там ровно 1 (один).
fxd
В крестах, пыхе, жабе, шарпе, питоне, да и в других языка уже давным-давно есть форич для коллекций. И только жабоскриптоёбы продолжают жрать кактус с сишным for'ом, и утверждать, что все нормально, так и надо.
В фф много чего полезного работает - генераторы-итераторы, yield, let.
Проблема в том что больше нигде кроме фф они не работают.
Жаль только, что огнелис ВНЕЗАПНО стал говном.
P.S. Пишу с 28-го, брата никогда не было.
Тарасокомп?
А результат GetElementByTagName никуда не сохраняешь случаем? Сейчас затестим.
Запускалось 10 таких таймеров.
До теста - 1.3Gb виртуальной, 0.5Gb юзается
Во время теста - 1.3Gb виртуальной, 0.5Gb юзается
Разницы никакой. Видимо или пофиксили, или эти 500 мег - порог для сборщика мусора.
Кинь код, которым получалось завалить, если он у тебя сохранился.
ПРИШЛО ВРЕМЯ ЗАМУТИТЬ СКОП.
СКОП САМ НЕ ЗАМУТИТСЯ.
ЗАВЕРНИ ЕГО В ФУНКЦИЮ, ЗАВЕРНИ ЕЩЕ РАЗ.
ЗАЧЕМ МНЕ НУЖЕН LET, У МЕНЯ НЕТ ВРЕМЕНИ ЕБАТЬСЯ С НИМ.
ЛУЧШЕ ЕЩЕ РАЗ ОБЕРНУТЬ СКОП В ФУНКЦИЮ.
Я тебя немного просвещу, чтоб ты не выдавал очередную порцию херни.
Капсболд - это когда текст написан одновременно КАПСОМ и болдом.
Что-то такое:
То есть, стандартного await нет, все должны пилить все реально удобно, реально падсибя?
P.S. array[i].call(this); надо заменить на array[i].call(context);, т.к. внутри функции вызывающий может его потерять. Но свой код я не ещё запускал - может ещё баги есть.
Эдакий thread sleed/yield.
Т.е. у ячейки должно быть два метода принимающие "рабочего": "старт" и "финиш". Старт вызывает у "рабочего" "ждать", а "финиш" вызывает у рабочего "следующий". Своего рода комбинация посетителя со стейтом.
Может и не дословно, но примерно так.
Гугли javascript promises, js deferred
http://wiki.commonjs.org/wiki/Promises
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Как-то так.
Думаю тут что-то от монад и cps есть.
Т.е. например, если у нас есть элемент, который может загружать в себя картинку больше одного раза, и мы хотим реагировать на загрузку одинаково каждый раз: deferred не сможет это сделать, т.как он срабатывает только первый раз, когда событие произошло, потом его можно только удалять.
Предположим, все тот же элемент, но у нас есть два других участка кода, которые хотят получать сообщения о смене картинки, пердположим один из обработчиков сообщения бросил ошибку: что делать во втором обработчике? Считать ли, что deferred завершился с ошибкой (и вызывать соответствующий метод) или продолжать работать в обычном режиме? Когда у нас есть просто колбеки такие вопросы не возникают.
Вобщем, я к тому, что deferred - плохая абстракция.
Они как раз созданы чтобы решить эти проблемы.
>пердположим один из обработчиков сообщения бросил ошибку: что делать во втором обработчике?
>Считать ли, что deferred завершился с ошибкой (и вызывать соответствующий метод)
Всё зависит от заданной монады стратегии исполнения.
Monad + cps = Control.Monad.Cont(T)
Это адский вынос мозга
Если этот async эквивалентен фьючерсу, а await - это get, тогда для корректной работы нужно два потока, и тогда все три await - лишние.
Даже если магический await sleep сообщает шедулеру, что он может переключить нас на другую корутину (ещё и с указанием, когда разбудить), нужно полноценная поддержка корутин с суспендом/резьюмом, а такого рантайм js вроде бы никогда не умел (в lua такое есть, но и там сложно заранее узнать, когда тебя разбудят).
Асинк метод в шарпе - это необычный метод - он компилится то ли в конечный автомат, то ли в лапшу из коллбеков. И возвращает он future. А await проверяет future на завершеность, и если не завершено - отдает управление. Причем авейт можно юзать ТОЛЬКО в асинк методах, т.к. остальные нельзя просто взять и прервать (понадобится поддержка короутин и т.п. т рантайма).
Короче это просто красивый и удобный сахар вокруг фьючерсов.
Ага. И исключения работают неадекватно. Полумера. Не нужно.
А что ты хотел от синтаксического сахара? :)
так это основной сценарий использования фьючерсов :)
запустить один потенциально блокирующий процесс в бэкграунд, поделать, что-то самому (например, запустить ещё один процесс), обработать результаты. Фьючерс, на котором сразу делают get(), практически бесполезен.
> Фьючерс, на котором сразу делают get(), практически бесполезен.
Да, согласен.
Но await это не get :)
это из типа видно :) в шарпе Task<T> (точнее, всё, что умеет GetWaiter()), но мы-то знаем, что это всё монады
> Но await это не get :)
вот это я всё никак не пойму, попозже ещё повтыкаю.
Что-то в духе "если задача уже выполнена - берем ее результат и продолжаем выполнять следующий кусок, если нет - просим задачу выполнить следующий кусок когда она завершится".
P.S. Блин, вот спорю-спорю с шарпеями, а ведь шарп потихоньку осваивается, и что самое ужасное, начинает мне нравиться...
Попиши в вижуалстудии, должно отпустить
Тарас тоже так начинал.
Обилие синтаксического сахара, много зачастую бесполезных фич и сложность стандарта - это на любителя. Кстати в этом плане шарп во многом схож крестами, только с managed-среда с clr и gc.
С выходом нового стандарта мне всё больше начинают нравиться кресты, точнее их сабсет - как нынче модно писать. Обилие стандартных эффективных многопоточных блоков - это вообще небесный дар.
во многом схож крестами, только с
managed-среда с clr и gc.
и наконец обошлись без сырых указателей
В unsafe вроде есть.
Divide et impera.
Это еще римляне знали. MS просто заимствовали стратегию успеха.
Подробности твоей личной жизни мне не особо интересны.
Загугли, ёба, во что декомпилируется await в C#.
async/await не требуют никаких дополнительных потоков. И выполняются они в строгом порядке, как колбечная лапша из топика.
Сейчас попробую изобразить это на жс...
+
В данном случае это просто буквы, код с этими буквами будет эквивалентен коду без них.
С исключениями код будет посложнее, но вполне реализуемо (отлавливать в кусках, упихивать во future через что-нибудь в духе raiseException(), и сделать коллбек onException).
То, что await принимает только одного слушателя - косяк моей рахитектуры, признаю. Да и это всего лишь пример, а не боевая реализация ;)
З.Ы. Можно сделать массив waiter'ов и вызвать их в цикле, но для демонстрации async/await это непринципиально.
Хм, а это идея! Ведь жс может кастануть функцию в строку и получить ее исходник. А затем можно распарсить ее и перепидорасить преобразовать await'ы в лапшу из коллбеков...
И ведь всяко кто-нибудь уже реализовал это для своей любимой ноды жс.
Щта эта?
$ = jQuery