Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (15)

Лучшие ответы пользователя

Все ответы (19)
  • Правильно ли сравнивать генераторы, промисы и async/await?

    kurtov
    @kurtov
    Сначала были Промисы и девелопер понял что это хорошо. Но девелопер задумался, а можно ли перестать писать then().then()... Но async\await еще не было, тогда девелопер взял функцию генератор смешал с промисом и родилось - co Это выглядело немного страшненько (имхо), но хайп был, который наплодил много статей почему это спасение - порой слог был такой уверенный, что вводил в заблуждение. А потом появились async\await - которые промисы, но без then().then().

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

    kurtov
    @kurtov
    2c6b13c11406488e93532b991c9ecd6f.png
    Потяните за верхнюю границу окна с информацией вниз
    Ответ написан
    1 комментарий
  • На самом ли деле в Китае такие узкие и дорогие каналы?

    kurtov
    @kurtov
    2013 год, стоимость подключения канала через Гонконг
    А - Скорость, М
    Б - Стоимость со стороны Гонконга, Юани
    В - Стоимость с Пекинской стороны, Юани
    Г - Общая стоимость
    А / Б / В / Г
    2 / 2400 / 2080 / 4480
    4 / 4800 / 3010 / 7810
    6 / 7200 / 4200 / 11400
    8 / 9600 / 4620 / 14220
    10 / 12000 / 5220 / 17220
    Тогда курс был примерно 1:5
    Т.е. за 10Мб выходило 86100 руб в месяц. И это только подключение интернет канала. Оплата за полгода вперед.
    Ответ написан
    1 комментарий
  • Как правильно организовать сложную цепочку ajax-запросов?

    kurtov
    @kurtov
    this.start = function(){
        // останавливаем репликацию
        return this.stopAndClearExistsReplication()
            // удаляем локальную БД
            .always(function(){ return this.deleteLocalDB() })
            // создаём локальную БД
            .always(function(){ return this.createLocalDB() })
            // ставим БД на репликацию
            .done(function(){ return this.addReplicationDocument() })
            // ставим репликацию на отслеживание
            .done(function(){ return this.replicationMonitoring() });
    };

    По примеру похоже что вы в каждом предыдущем методе bind`ите правильный this так что можно вынести в функции выше.
    this.start = function(){
        // останавливаем репликацию
        return this.stopAndClearExistsReplication()
            // удаляем локальную БД
            .always(deleteLocalDB)
            // создаём локальную БД
            .always(createLocalDB)
            // ставим БД на репликацию
            .done(addReplicationDocument)
            // ставим репликацию на отслеживание
            .done();
    };
    
    function deleteLocalDB(){ return this.deleteLocalDB() }
    function createLocalDB(){ return this.createLocalDB() }
    function addReplicationDocument(){ return this.addReplicationDocument() }
    function replicationMonitoring(){ return this.replicationMonitoring() }


    Если доступны стрелочные функции и this один на все методы
    this.start = function(){
        // останавливаем репликацию
        return this.stopAndClearExistsReplication()
            // удаляем локальную БД
            .always(() => this.deleteLocalDB())
            // создаём локальную БД
            .always(() =>  this.createLocalDB())
            // ставим БД на репликацию
            .done(() => this.addReplicationDocument())
            // ставим репликацию на отслеживание
            .done(() =>  this.replicationMonitoring());
    };


    Если есть промисы и имена методов не требуют капитанских комментариев
    this.start = function(){
        return Promise.resolve()
            .then(() =>  this.stopAndClearExistsReplication())
            .always(() => this.deleteLocalDB())
            .always(() =>  this.createLocalDB())
            .done(() => this.addReplicationDocument())
            .done(() =>  this.replicationMonitoring());
    };
    Ответ написан
    4 комментария
  • Какая разница между патернами?

    kurtov
    @kurtov
    Во втором случае вызовы
    var App1 = new App();
    var App2 = new App();
    создадут два разных объекта.
    Первый случай гарантирует что на странице будет только один App.
    Также есть разница в производительности, т.к. прямой вызов метода быстрее, чем поиск и вызов в прототипе - разница очень мала, но в критических местах может быть ощутимой
    $(function(){
    
      // Для первого способа можно изменять объект, зная что эти изменения видны всем
      App.prop1 = true;
    
      // Для прототипов изменения App1 не отражаются родительском App
      var App1 = new App();
      App1.prop1 = true;
    
    });
    $(function(){
    
      // Для первого случая есть изменения
      console.log(App.prop1); // true
    
      // Для второго случая создается новый потомок, который ничего не знает о других потомках
      var App1 = new App();
      console.log(App.prop1); // undefined
    
    });
    Ответ написан
    Комментировать