• Кеширование запроса при вызове функции NodeJS

    Deferred/Promise, реализаций данного шаблона очень много, но вот пример использования
    var cache_ = {},
        Class = require('atma-class');
    
    function getUserData(id, callback) {
        
        var dfr = cache_[id];
        if (dfr == null) {
            // делеаем запрос только с первым вызовом функции с этим id
            dfr = cache_[id] = new Class.Deferred();
            
            vk.api('users.get', {
                'user_ids': id,
                'fields': 'photo_100'
            }, function(err, result) {
                if (err)
                    return dfr.fail(err);
        
                dfr.resolve(result.response[0]);
            });
        }
        
        // подписываемся на окончание загрузки, если же
        // загрузка уже завершилась(успешно или нет),
        // то callback вызывается сраюу
        dfr
            .done(function(response) {
                callback(null, response)
            })
            .fail(callback);
    
    }
    Ответ написан
    6 комментариев
  • AngularJS и зависимость от коннекта к серверу

    maxaon
    @maxaon
    Плохая библиотека, поищите что-то лучше.
    Метод call должен всегда возвращать промис, а не только тогда, когда произошло подключение (ready===true).
    К тому же, этот код захламляет глобальную область видимости переменной ready. Также используется console вместо сервиса $log.
    Ответ написан
    3 комментария
  • EmberJS и WebSocket

    Zerstoren
    @Zerstoren
    Знаком с траблой. Решил проблему, с помощью обертки.

    Если кратко, вызывая у обертки send, первый параметр, роут на сервере. Второй - данные, Третий не обязательный callback функция.

    Если есть callback, то на сервер уходят данные, а последний элемент объекта __async с случайным числом. Когда сервер принимает такое сообщение, он выполняет обработку и в ответе добавляет тот-же __async ключ.

    Могу дать исходник этой обертки.

    В onMessage если есть этот ключ, просматривается список callback`ов на этот ключ. Если ключ есть, то вызывается функция.

    Для тех кто говорит, юзайте ajax. А если у человека на основе этого соединения происходит авторизации и все подготовки? В добавок писать 2 разных интерфейса для одного приложения - бред.

    @Stricker Я тоже пишу игрушку и уже пробовал ajax`ы и другие вещи. Не делите интерфейс связи сервера и клиента, запутаетесь еще.
    Ответ написан
    2 комментария