你可以设置一个基本的请求/响应
reactor并用promises包装它.
设置反应堆:
var callbacks = {};
websocket.onmessage = function(event) {
var data = angular.fromJson(event.data);
if (angular.isDefined(callbacks[data.request_id])) {
var callback = callbacks[data.request_id];
delete callbacks[data.request_id];
callback.resolve(data);
} else {
$log.error("Unhandled message: %o",data);
}
};
请求功能:
var requestId = 0;
$scope.getRequestId = function() {
return requestId++;
};
$scope.request = function(data) {
var request = {
request_id: $scope.getRequestId(),data: data
};
var deferred = $q.defer();
callbacks[request.request_id] = deferred;
websocket.send(angular.toJson(request));
return deferred.promise.then(function(response) {
request.response = response;
return response;
});
};
示例用例可能是:
$scope.request("My Request").then(function(response) {
// do something with response
});
您还可以使用onerror和onclose在适当的位置执行$q.reject,以便websocket错误可以使其返回到promise.