Javascript(Angularjs)websocket与承诺?

前端之家收集整理的这篇文章主要介绍了Javascript(Angularjs)websocket与承诺?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个项目中使用 Angularjs.我使用$q.all和来自$http的多个请求,这是有用的.

在新的情况下,我使用websocket,但我不知道如何使用websocket的promises.

$http返回promises,但websocket不是.

Websocket示例:(这不是真正的代码)

我发送包ID是1000,我修改包ID是2000.

websocket.send(1000);

websocket.onMessage(data) {
  if (data.id == 2000) {
    // do something
  }
}

我开始使用带有websocket的Promises,这可能吗?

解决方法

你可以设置一个基本的请求/响应 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.

这是一个使用上述技术的简单websocket echo示例:http://plnkr.co/edit/ORSqXz07I9cLspZQg1iM?p=preview

猜你在找的JavaScript相关文章