AngularJS$q承诺使用socket.io
AngularJS $q promise with socket.io
我想创建一个angularJS promise,它可以与socket.io一起使用。我目前有一个回调集来处理响应:
function request(event, data, callback) {
socket.emit(event, data);
socket.on(event, function(d) {
socket.off(event);
callback(d);
});
}
这迫使我写这样的东西:
request('myEvent', 'Hello World !', function(data) {
...
});
我想知道我们是否可以使用一个承诺(从angular提供$q服务):
request('myEvent', 'Hello World !').then(function(data) {
});
谢谢!
您可以尝试类似的东西
function request(event, data) {
var deferred = $q.defer();
socket.emit(event, data);
socket.on(event, function(d) {
socket.off(event);
deferred.resolve(d);
});
return deferred.promise;
}
然后你可以使用
request('myEvent', 'Hello World !').then(function(data) {
});
function request (eventName, data) {
return $q(function (resolve, reject) {
socket.emit(eventName, data);
socket.on(eventName, function (data) {
socket.off(eventName);
resolve(data);
});
});
}
well promise只能解析或拒绝一个。事件会不止一次发生吗?你在乎它是否比发生得更多吗
如果你的活动只开了一次,那么你可以承诺是的。
function request(event, data, callback) {
socket.emit(event, data);
socket.on(event, function(d) {
socket.off(event);
callback(d);
});
}
变为:
function request(event, data) {
return $q(function(resolve, reject) {
socket.emit(event, data);
socket.on(event, function(d) {
socket.off(event);
resolve(d)
});
});
}
您将使用它:
request('event', data).then(....)
我在一个函数中包装socket.on(event)并多次调用该函数时遇到了问题,它将打开多个函数。因此,当后端调用特定的套接字事件时,socket.on(事件)会被多次调用。如果使用$rootScope修复了此问题$在其上只能有一个实例。
this.search = (query) => {
var deferred = $q.defer();
socket.emit('search', {query: query}) // send data to backend
$rootScope.$on('search', function(event,data){
deferred.resolve(data);
});
return deferred.promise;
}
//get data back from backend
socket.on('search',(data) => {
$rootScope.$emit('search',data);
});
漏洞代码封装在Angularjs服务中。现在要从套接字获取数据。在('search')上,你可以做这样的事情:
SocketioService.search('Some query').then( (data) => {
//do something with the data from the backend
})
不确定这是否是最好的解决方案,但它有效:)
相关文章:
- 如何使用Socket.io将命令从客户端发送到服务器
- Socket.IO未定义变量
- Socket.io on Mozilla Rhino
- socket.io发射三次
- AngularJS$q承诺使用socket.io
- 如何知道使用socket.io订阅/取消订阅频道
- 通过socket.io发射给特定的人
- 通过socket.io从浏览器流式传输视频
- 通过node.js和socket.io向特定用户发送数据
- 如何使用socket.io在meanjs项目中配置jshint
- 如何使用Socket.io和Node.js开发大型聊天应用程序
- RangeError nodejs socket.io
- 通过node.js和socket.io在两个用户之间发送消息
- 使用socket.io更新express实时视图
- socket.io cookie解析握手错误
- 如何在同一端口上使用ExpressJS和Socket.io
- 使用cordova快速nodejs socket.io
- 通过socket.io与heroku应用程序进行通信
- Socket.io客户端在使用名称空间时忽略端口[Bug?]
- Node.js-socket.io-对io.sockets的引用突然未定义