• Как вернуть значение из асинхронной функции?

    Krasnodar_etc
    @Krasnodar_etc
    avito front
    Во-первых, в getImageSize async(асинхронная)-функция , они всегда возвращают промис. Чтобы получить её результат, вам нужно написать либо await getImageSize(imageDataUrl), либо getImageSize(imageDataUrl).then(result => { console.log(result); });

    А дальше давайте разбирать все три примера:
    1 - getImageSize ничего не возвращает, она добавляет к картинке слушатель onload , который возвращает (в никуда) width, height

    2 - getImageSize возвращает результат присваивания функции в image.onload , в данном случае, саму функцию, которую вы присваиваете

    3 - наиболее похожий на правду вариант, но с одной ошибкой - ваш код синхронный, возврат значения отрабатывает раньше, чем произойдёт событие load и в переменных появятся правильные значения

    Рабочий алгоритм getImageSize должен быть такой:
    1 - Создаётся объект Image + указывается src (это у вас правильно)
    2 - Вешается слушатель onload на изображение
    3 - Когда этот слушатель выполняется, можно прочитать размеры из Image и вернуть их

    С моей точки зрения без Промисов это нельзя написать, если только не пересматривать вообще весь ваш код
    Ответ написан
    Комментировать
  • Как вернуть значение из асинхронной функции?

    @DimaIs
    Async/await вам в этом случае не поможет, необходимо переделать реализацию под промисы
    Статься про промисы
    Касательно решения: вам необходимо резолвить промис со значением в виде обьекта с необходимыми данными, промис резолвится функцией resolve, которая передается первым аргументом коллбека, передаваемого в конструктор промиса:
    interface IImageSize {
        width: number;
        height: number;
    }
    
    const getImageSize = (imageDataUrl: string): Promise<IImageSize> =>
        new Promise((resolve): void => {
            //Создаем промис, его же и возвращаем
            const image = new Image();
            image.src = imageDataUrl;
    
            image.onload = () => {
                const { width, height } = image;
                const imageSize: IImageSize = {
                    width,
                    height,
                };
                resolve(imageSize); // резолвим промис с необходимым нам обьектом
            };
        });
    
     // вызываем функцию либо внутри другой асинхронной функции, дабы был доступен оператор await
    const anyFunction = async (): Promise<void> => {
        const imageSize: IImageSize = await getImageSize("<any_image_url>");
        const { width, height } = imageSize;
    };
    
    //либо поступаем как с любым другим промисом
    getImageSize("<any_image_url>").then((imageSize: IImageSize): void => {
        const { width, height } = imageSize;
    });
    Ответ написан
    2 комментария
  • Зачем нужно стабилизировать зависимости в package.json?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Это связано не только с ошибками. Новые версии библиотек могут содержать новую функциональность, иногда могут быть даже обратно не совместимы с предыдущими версиями.

    По этому - обновление зависимостей (кроме минорных версий) не делают автоматически, а только целенаправленно.
    Ответ написан
    Комментировать
  • Где и как используют деревья в программировании?

    Aco
    @Aco
    Заклинатель кода
    Помимо того что уже сказали, есть еще такой вид деревьев как AST, используется для описания синтаксиса. Почти во всех языках программирования, шаблонизациях используется для компиляции и интерпретации кода.

    Так же есть алгоритм Nested Sets для хранения древовидных структур в базе данных, например категории чего-либо
    Ответ написан
    Комментировать
  • Где и как используют деревья в программировании?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Само по себе тупо дерево весьма бесполезно. Но как базовая организация данных она встречается много где. Если на него навесить какие-то дополнительные свойства и поддерживать их, то получаются классные штуки.

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

    Еще деревья часто используются в алгоритмах на строки. Есть такая структура - бор (trie) - позволяет эффективно хранить кучу строк и искать: есть ли такая строка в структуре. Более продвинутые алгоритмы типа Ахо-Корасика, Укконена тоже строят некоторое дерево с дополнительными фишками и позволяют делать крутые вещи, типа искать кучу шаблонов в тексте разом, или моментально находить самую часто встречающуюся подстроку задонного размера.

    Куча (heap) используется для сортировки а так же реализации приоритетных очередей.

    Далее, деревья в смысле графов тоже используются, например, в сети. Маршрутизаторы строят остовное дерево и раздают команды по его ребрам.
    Ответ написан
    Комментировать
  • Где и как используют деревья в программировании?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Нечто, действительно имеющее древовидную форму — например, деревья каталогов на дисках, деревья сцен в 3D, деревья принятия решений.
    2. Деревья поиска — структуры данных, позволяющие добавлять-убирать объекты и позволяющие быстрый поиск по ключу. Например, словари всякие, индексы БД.
    3. Так называемая куча — структура данных, позволяющая добавлять-убирать объекты и поддерживающая минимальный элемент в этом множестве. Используется как вспомогательная в каких-нибудь алгоритмах.
    4. Двоичное разбиение пространства в 3D — известный способ сортировки от дальних к ближним.

    Кроме того, деревья могут не существовать в памяти, а только подразумеваться — в синтаксических разборах, теоретико-игровых обсчётах. Хотя один из вариантов промежуточного хранения разобранной формулы, чтобы потом по ней проводить многократные расчёты — дерево (но чаще используют обратную польскую запись).
    Ответ написан
    Комментировать
  • Где и как используют деревья в программировании?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Деревья везде:)
    Самый банальный пример - дерево поиска, BST, сбалансированное BST(например, красночерное дерево, rb-tree), используется для организации структур, хранящих пары ключ-значение(например имплементация SortedMap - TreeMap в Java).

    Сильно ветвистые сбалансированные деревья (В-дерево), используются для реализации индексов в СУБД

    Дерево решений в машинном обучении, используется для принятия решений. Развитие идеи - случайный лес, использование множества деревьев решений.

    Хэш-дерево, или дерево Меркла - в блокчейнах для хранения транзакций.

    Префиксное дерево - для хранения и поиска ключей-строк

    Октодеревья, q-деревья в играх и графике для разбиения пространства на области.

    Даже вьюхи в большинстве GUI фреймворков организуются в виде деревьев.

    И это я ещё далеко не всё перечислил, 100%
    Ответ написан
    Комментировать
  • Структура React&Redux?

    y0u
    @y0u
    dev
    Читал много информации но везде она разная

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

    я делаю отдельные компоненты для каждого элемента (для ul и li тоже отдельние)

    Нельзя сказать, что это не правильно, но в большинстве среднестатистических проектах может быть слишком избыточно. Подумайте о том, зачем вам отдельный компонент LI и как вы будете его использовать. Возможно вам не нужно выносить этот элемент в отдельный компонент.
    Ответ написан
    1 комментарий
  • Как сделать аутентификацию с помощью React&Redux?

    MifeeX
    @MifeeX
    Жабаскриптизер
    Я бы сделал как...
    Отдельный файл а-ля БД.js(или стейт редаксовский) где хранил бы данные. При успешной авторизации(т.е. подсасывание данных с БД) выполнял бы функцию, которая перенаправляет пользователя на его страницу.
    props.history.push('/hadpageUrl')

    Или просто посмотрите вот эту страницу, там конечно не слово в слово, однако при грамотном прочтении можно что-то выудить:
    Как реализовать redirect в react?
    Ответ написан
    3 комментария