我已经在我的服务中做出了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);
}