LINUX.ORG.RU

«Простой» синтаксис

 ,


0

1

Небольшая задача. Вот так — не работает:

Ext_Ajax_promise = async function(options) {
    return new Promise(function(resolve, reject) {
        options.callback = function(options, success, response) {
            let result = {
                response: response,
                options: options
            }
            (success ? resolve : reject)(result);
        }
        Ext.Ajax.request(options);
    });
}

Кто за 2 секунды понял, почему, — тот молодец и гуру джаваскрипта. А я не молодец, я ломал голову минут 10.

Если кто-то не догадался, где ошибка, то смотрите историю правок поста — там скрыта рабочая версия.

Мораль простая: не слушайте адептов «простого синтаксиса» и всегда шарашьте точки с запятой.

Задавайте ваши ответы.

★★

Последнее исправление: wandrien (всего исправлений: 1)

Ответ на: комментарий от wandrien

если речь зашла за синтаксический сахар, вот мой вариант:

const Ext_Ajax_promise = (options) => new Promise((resolve, reject) => {
    options.callback = (options, success, response) => {
        if (success) {
            resolve({ response, options });
            return;
        }
        
        let error = new Error('Ext_Ajax_promise failed');
        error.response = response;
        error.options = options;
        reject(error);
    }
    Ext.Ajax.request(options);
});

рад что ExtJS еще шевелится ).

drsm ★★
()
Ответ на: комментарий от drsm

рад что ExtJS еще шевелится ).

Не знаю, можно ли это назвать шевелением… Я на поддержке старого проекта. Тут ExtJS настолько древний, что еще без промисов. И вообще весь код написан лесенкой из колбеков.

wandrien ★★
() автор топика

Ого. Получается, что ты пытался вызвать result.

и всегда шарашьте точки с запятой

Вообще весьма сомнительная «фича» жс, тем ни менее, некоторые топят за то, чтобы их не ставить.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

и всегда шарашьте точки с запятой

Вообще весьма сомнительная «фича» жс, тем ни менее, некоторые топят за то, чтобы их не ставить

Я еще не встречался с такими неадекватами. Пример в исходном сообщении является далеко не единственным вариантом двусмысленного толкования кода. Я вообще не понимаю, почему в strict режиме не сделали отсутствующую точку с запятой ошибкой синтаксиса.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Я еще не встречался с такими неадекватами.

Они были вот прям тут на лоре, совсем недавно. Даже были решительно готовы отстаивать своё мнение. Но срач скатился к вкусовщине, их застебали, типа, что им лень одну кнопку нажать и т.д.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
(success ? resolve : reject)(result);

Никогда не понимал любителей таких конструкций. Экономия копеечная, а чтобы прочесть код надо напрягаться.

if (success) resolve(result) else reject(result)

Ну или в крайнем случае

success ? resolve(result) : reject(result)

Хотя это уже похоже на выделывание.

Мораль простая: не слушайте адептов «простого синтаксиса» и всегда шарашьте точки с запятой.

Мораль тут другая - надо меньше выделываться и использовать линтер, например standardx (с расслабленными под свои хотелки правилами).

Vit ★★★★★
()
Ответ на: комментарий от Vit

Никогда не понимал любителей таких конструкций. Экономия копеечная, а чтобы прочесть код надо напрягаться.

  1. Не умеет читать простейший код из двух операций и 4 идентификаторов.

Мораль тут другая - надо меньше выделываться и использовать линтер, например standardx (с расслабленными под свои хотелки правилами).

  1. Оправдывает кривой дизайн тем, что его можно подпереть костылями.

Что-то я не удивлён.

wandrien ★★
() автор топика
Ответ на: комментарий от Vit

Да нафиг тренарный оператор вообще и его адептов.

anonymous
()
Ответ на: комментарий от crutch_master

:). Просто я считаю, что ковыряние не линтованного JS кода - это зря потраченное время. Какбэ многократно проверенный факт.

Vit ★★★★★
()
Ответ на: комментарий от anonymous

Только у криворуких говнокодеров он скатывается.

Ты, пока мамка готовит, можешь писать свой идеальный код. В реальносити ты над ним работаешь не один.

anonymous
()

Ты же вроде хотел свою поделку не на джэ-эс писать, а на чём-то лёкгом и одновременно всё остальное, что-то там?

Это всё на что тебя хватило?

anonymous
()
Ответ на: комментарий от anonymous

Ты же вроде хотел свою поделку не на джэ-эс писать, а на чём-то лёкгом и одновременно всё остальное, что-то там?

А что в JS не лёгкого?

Это всё на что тебя хватило?

Это вообще другое. По работе.

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

А что в JS не лёгкого?

Ты же вот не справляешься.

anonymous
()
Ответ на: комментарий от anonymous

В реальности ты просто отказываешься признавать свою криворукость.

Мне наплевать, я коду не поклоняюсь и на него не фапаю. У меня чисто практический подход. Например code style гораздо лучше (проще) иметь, чем нет. А ты, после мамкиного борща, свою красоту как скульптор можешь там ковырять. Только не показывай никому. Чтобы и дальше мечтать, что как творец ты что-то можешь. Ведь обломают же эти негодяи с интернета и троли.

anonymous
()
Ответ на: комментарий от wandrien

А что в JS не лёгкого?

Вэ-образная восьмёрка.

anonymous
()
Ответ на: комментарий от byko3y

Теперь встретился (я не ставлю). Потому что могу.

anonymous
()

Задавайте ваши ответы.

Задаю: зачем ты решил обмазываться чистым JS вместо того, чтобы воспользоваться языком программирования? Typescript эту ошибку моментально ловит, см. ссылку выше:

This expression is not callable.
  Type '{ response: Fn; options: any; }' has no call signatures.(2349)
input.tsx(11, 22): Are you missing a semicolon?

Что касается ";", то соглашусь - что бы ни кричали смузихлёбы на гироскутерах, реальность JS такова, что использование ; в итоге сокращает количество ошибок.

runtime ★★★★
()
Последнее исправление: runtime (всего исправлений: 1)

Ext_Ajax_promise

Ох.

всегда шарашьте точки с запятой

Зачем? Несколько лет назад была один раз похожая ситуация, но я тогда видимо был упорот не очень понимал, что вообще делаю. Если в себя не приходишь, точки с запятыми не помогут. Ну если конечно нравится, можешь ещё бесполезных символов добавить, благо стрипнуть не долго.

ddidwyll ★★★★
()

О, тут собрание? Объясните, насколько нужно не понимать что пишешь, чтобы понадобились точки с запятыми? А просто запятые тоже помогают?

На js и так не просто писать компактный и элегантный код, значит надо до конца всё засрать, правильно.

ddidwyll ★★★★
()
Последнее исправление: ddidwyll (всего исправлений: 2)
Ответ на: комментарий от runtime

Задаю: зачем ты решил обмазываться чистым JS вместо того, чтобы воспользоваться языком программирования?

Мне платят за то, чтобы переписать этот кусок легаси малой кровью. TypeScript там как собаке пятая нога.

wandrien ★★
() автор топика
Ответ на: комментарий от Vit

Этот тернарный однострочник не для «само по себе», а для подстановок в другое «более удлинненное» выражение «в строку». Раньше (особенно в сях) было полно любителей экономить строки, «пиша» нечитаемую «перловую кашу» и разговаривая жупелами про «оверхед!» и «оптимизацию!» без пруфов выхлопа профайлера (а потом еще «кэш-френдли погромирование» пояснило по хардкору, что вилки, досрочные выходы из цикла и т.д. низводят ручные выеживания до уровня «теплового шума» и стат. погрешности :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от wandrien

Только есть нюанс. Когда им не злоупотребляют :) Как гоуту. «Выходы из вложенных циклов!» говорят одепты — а на деле надо подумать «а зачем там вложенные циклы?» Или «а зачем там досрочный выход?»

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

злоупотребляют

Чем угодно можно злоупотребить. Видел я ?:, которые несколько раз не умещаются в одну экранную строку. Но я и покруче видел: огромное нечитабельное выражение с множеством ||, &&, == и !=, а внутри него притаилось присваивание. Которое не ошибка, а так и задумано. Знал бы автора, оторвал бы руки.

wandrien ★★
() автор топика
Ответ на: комментарий от slackwarrior

Как гоуту. «Выходы из вложенных циклов!» говорят одепты — а на деле надо подумать «а зачем там вложенные циклы?» Или «а зачем там досрочный выход?»

Никогда таких не встречал.

Реальное использование goto — это «раскрутка стека для бедных» в сишном коде, когда нет возможности использовать кресты. Чтобы при выходе из функции освободить все ресурсы, ничего не потеряв.

wandrien ★★
() автор топика
Ответ на: комментарий от slackwarrior

Обычно необходимость выйти из вложенного цикла говорит о том, что автору стоило бы давно применить шаблон «извлечение метода» и разбить функцию на две. (Как минимум).

wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Мне платят за то, чтобы переписать этот кусок легаси малой кровью. TypeScript там как собаке пятая нога.

Если легаси и малой кровью, то вопрос отпадает. Но имей ввиду, что работая даже с чистым JS ты можешь пользоваться типами через JSDoc комментарии, при условии, что пользуешься редактором типа VSCode: Typescript JSDoc Reference.

Выглядит это примерено вот так.

runtime ★★★★
()
Последнее исправление: runtime (всего исправлений: 1)
Ответ на: комментарий от wandrien

Каргокультистский булшыт про необходимость натягивания «паттернов» на все подряд сильно переоценен — это джавизм головного моска, из-за которого теперь некритично молятся на «книгу четырех», как будто не было ничего другого :) Достаточно бывает передавать на вход не мусор, который приходится парсить, если можно не парсить, или достаточно тривиально два цикла сводятся в один (если там вообще нужен цикл — иногда можно несколько присваиваний и руками сделать вместо того чтоб городить отдельный кол, который потом заставлять инлайниться или «экстрактировать... макрос»).

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

Вот видишь, как ты сильно зависишь от внешнего облика слов и не обращаешь внимания на суть.

А если бы я написал:

Обычно необходимость выйти из вложенного цикла говорит о том, что автору давно стоило бы переписать функцию и разбить на две.

, ты до чего докопался бы?

wandrien ★★
() автор топика

я молодец и гуру, хотя я болт клал на эти асинки и стрелочки с летами, пишу по старинке варами и калбяками, в отличии от современных говногуру мой код переносим и совместим даже с динозаврами.

deep-purple ★★★★★
()
Ответ на: комментарий от slackwarrior

Я тебе про Фому, ты про Ерёму, вот и весь сказ.

wandrien ★★
() автор топика

Тред не читал, после первой закрывающей фигурной скобки нет точки с запятой.

CLU
()
Ответ на: комментарий от deep-purple

Я тут еще помаленьку тащу кой-чего на CoffeeScript. И вот там всё на лесенках из промисов. При чем, промисы от jquery.

wandrien ★★
() автор топика
Ответ на: комментарий от deep-purple

в отличии от современных говногуру мой код переносим и совместим даже с динозаврами.

Нет. Твой код просто одинаково тормозит, что в современных условиях, что в старых. Потому что ты не используешь возможности современных движков, намеренно производя говнокод, вместо того, чтобы разделять поддержку современных и легаси платформ, тем более, что делается это тривиально, указанием флага в подгружаемом скрипте.

anonymous
()
Ответ на: комментарий от wandrien

буквально вчера использовал гото для скачка из цикла в цикле выше начала внешнего цикла - без готы крутил бы несколько циклов в циклах копипастой.

deep-purple ★★★★★
()
Ответ на: комментарий от wandrien

как выйти из вложенного цикла, который ты вынес в другую функцию, так, чтобы оказаться выше начала внешнего цикла?

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.