Показать сообщение отдельно
  #1 (permalink)  
Старый 22.10.2015, 18:45
Интересующийся
Отправить личное сообщение для Digan Посмотреть профиль Найти все сообщения от Digan
 
Регистрация: 08.10.2012
Сообщений: 12

Deffered и WebSocket
Создаю несколько $.Deffered объектов. Каждый должен отслеживать выполнение запроса через функцию, которая в свою очередь делает запрос через один глобальный WebSocket. Когда срабатывает событие WebSocket.onmessage вызывается указанная в параметров функции функцию обратного вызова. Функцию обратного вызова должна переводить состояние каждого Deffered в resolve. Но почему-то это срабатывает только для последнего созданного Deffered. Почему так происходит?

var promise = signPromise(dataString);

promise.then(function () { console.log(1); }, function () { console.log(2); }, function () { console.log(3); });

var promise2 = signPromise(dataString2);

//в resolve перейдет только этот
promise2.then(function (Sign, Value) { console.log(1); }, function () { console.log(2); }, function () { console.log(3); });

function signPromise(dataString) {
    
    return $.Deferred(function (obj) {

        var self = this;

        var mycallback = function () {
            self.resolve(1, 2);
        }

        requestFromSocket(dataString, false, mycallback);

    }).promise();
}

...

var webSocket = new WebSocket('wss://...');
var callback = null;

webSocket.onmessage = function (event) {
    callback();
};

function requestFromSocket(data, attached, callBack) {
    callback = callBack;
    webSocket.send("...");
}

Последний раз редактировалось Digan, 22.10.2015 в 18:53.
Ответить с цитированием