Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Deffered и WebSocket (https://javascript.ru/forum/jquery/59024-deffered-i-websocket.html)

Digan 22.10.2015 18:45

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 23.10.2015 16:55

Насколько я понял тут параллельно выполнить не получится. Поэтому сделал последовательную цепочку промисов.


Часовой пояс GMT +3, время: 16:02.