感觉我的AngularJS控制器依赖于一个Promise

时间:2016-06-14 12:19:25

标签: angularjs angular-promise

我已经在我的服务中做出了2个承诺。第一个连接到websocket

connect : function() {
    var deferred = $q.defer();
    var promise = deferred.promise;

    this.socket = new WebSocket('ws://localhost');
    this.socket.addEventListener('open', function (e) { 
        deferred.resolve("connected")
    });
    return promise;
}

,第二个通过websocket发送消息

send: function (msg, scope) {
    var deferred = $q.defer();
    var promise = deferred.promise;
    this.socket.send(angular.toJson(msg))
    return promise
}

在我的控制器中,我只想在连接打开时发送。为了实现这一点,我的代码看起来像这样

myService.connect()
    .then(function() {
        var myData = myService.send(data);
}

myData.then(function(d) {
    // do something with the data
});

它以这种方式工作,但为什么我觉得这不是要做的事情?我对angularJS和Promises很新。我觉得在另一个承诺的.then内创建一个新承诺是脏编码。

发现this很好的解释完全相同,但我仍然不相信。如果我想通过websocket发送20条消息,那就像我在一个myService.connect承诺整个控制器的内部工作。

myService.connect()
    .then(function() {
        var myData = myService.send(data);
}
    .then(function() {
        var myData = myService.send(data1);
}
    .then(function() {
        var myData = myService.send(data2);
}
    .then(function() {
        var myData = myService.send(data3);
}

0 个答案:

没有答案