我在项目中使用 Angularjs。我将 $q.all 与来自 $http 的多个请求一起使用,它的工作。
在新的案例中,我使用了 websocket,但我不知道如何将 promises 与 websocket 一起使用。
$http 返回 promise ,但 websocket 不是。
Websocket 示例:(这不是真正的代码)
我发送的pack id是1000,我revice的pack id是2000。
websocket.send(1000);
websocket.onMessage(data) {
if (data.id == 2000) {
// do something
}
}
我去用 websocket 使用 Promises,这可能吗?
最佳答案
您可以设置一个基本的请求/响应 reactor并用 promise 包装它。
设置 react 器:
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 回显示例:http://plnkr.co/edit/ORSqXz07I9cLspZQg1iM?p=preview
关于有 promise 的 Javascript (Angularjs) websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235784/