Какой-то у вас косяк в форматировании ожидаемого результата - position на разных уровнях. Отформатируйте нормально, чтобы было понятно, чего вы хотите.
P.S. А просто ключ массива нельзя использовать?
Ну как нет библиотек? Сделайте отдельный микросервис, как вам уже предложили и используйте там всё, что душе угодно - хоть ноду, хоть php (это два стека, под которые я точно знаю о существовании библиотек).
Это решение (отдельный сервис) абсолютно ничем принципиально не отличается от генерации на клиенте, но оно при этом в разы проще и надёжнее.
Да, действительно, об этом я не подумал. Но я бы всё-равно делал это на сервере - есть уже множество готовых библиотек и инструментов для решения этой задачи, а вот клиентских таких инструментов я не видел. Судя по вопросу, у вас нет задачи делать это непременно на клиенте, так зачем же писать велосипед?
Алексей Алюшенко: если ваша задача - не нагружать сервер, то нужно скрипт не пилить, а оптимизировать. Если вы должны кому-то $100, неважно ведь будете вы их отдавать долларовыми бумажками или одной - результат один.
Забудьте на секунду про this. Bind и call делают разные вещи - bind привязывает контекст для последующего вызова, а call сразу вызывает функцию с указанным контекстом.
Результат совершенно разный. Попробуйте поэкспериментировать с этим вариантом, там понятнее различия - https://jsfiddle.net/koceg/p2utcp9j/1/
Потому что bind вернёт ссылку на функцию, а call - результат её выполнения. То есть callback будет выполнен в момент установки свойства, а после резолва промиса вывалится ошибка, что undefined (то, что сейчас возвращает callback) не является функцией.
Но это уже к вопросу не относится напрямую - можно просто cb привязать к промису, если контекст не нужен (хотя, обычно его сохраняют, конечно).
Sergey Goryachev: я понимаю о чём вопрос. Но 1) логи и настройки - это не обычные текстовые файлы и 2) как я уже сказал, в мире линуксовых серверов понятие "обычный текстовый файл" в общем-то отсутствует.
hubramubr: > Но в любом случае он должен разбираться хотя бы немного. Иначе его команда будет не эффективна.
Это менеджер будет неэффективен, а не команда. Но, честно говоря, я не вижу чем хороший менеджер проекта на java отличается от хорошего менеджера проекта на php.
safenoob: смысл от этого не меняется. Ваш метод getTickets возвращает массив строк, а вы потом на каждой строке пытаетесь вызвать метод getTitle, которого там нет и быть не может.
ubernoob: именно на практике и понять :)
Если говорить просто, пока вы не столкнётесь с ситуациями, когда нужен интерфейс, сложно начать их использовать. Тут люди ударяются в две крайности: или пишут на каждый чих по интерфейсу, или вообще их не создают.
Если говорить в контексте php, например, интерфейсы нужны, чтобы ваш код "упал" как можно быстрее, если что-то пойдёт не так и упростить методы, убрав из них проверки типов. Самое раннее, когда вы заметите ошибку - это если вы объявляете, что класс реализует интерфейс, но создаёте не все необходимые методы. Тут вам и IDE подскажет и код сразу при запуске умрёт с ошибкой. Если этого не произошло, дальше скрипт автоматически завершится, если вы в метод, ожидающий объект, реализующий какой-то интерфейс, передаёте что-то другое. Таким образом проще отлавливать баги.
Можете начать вот с такого правила: тайп-хинтите в методы конкретные классы. Если встречаетесь с ситуацией, когда метод может принимать объекты нескольких схожих классов, выделяете общее API в интерфейс или абстрактный класс и тайп-хинтите уже его. Как видите, размер проекта или команды тут совсем ни при чём.
Что конкретно в приведённом примере вам непонятно? Он же простой очень. Что значит "не дал результатов", что не получилось, какие ошибки и т.п.?
В текущей формулировке на ваш вопрос невозможно дать ответ.
Алексей Тен: это не IIFE.
Я согласен, что в моём ответе не раскрыты все подводные камни такого кода и нет описания принципов его работы (хоть он и решает конкретно ту задачу, которая озвучена в вопросе).
Но и ваши комментарии не особо конструктивны - вместо того, чтобы пытаться меня подловить, вы могли бы дополнить ответ, чтобы он перестал быть "плохим".