我目前在客户端使用Node.js作为服务器(Express.js)和AngularJs,由于性能改进,从基于HTTP的API切换到WebSockets(使用Socket.io)。使用Promises的WebSockets控制流程
由于WebSockets缺少状态代码/错误管理,只是用可选的回调函数返回JSON,所以我必须实现这种错误管理。 当发生错误时,我想要一个一致的行为,而不是手动进行此错误检查我想包装它以减少代码中使用Promise而不是基于旧的基于回调的代码中的boilplate。
例如代替角使用原始socket.io:
socket.emit('users/read', {id: 2}, function handleResponse(res){
if(res.success){
var user = res.data;
socket.emit('projects/by-user', {userId: user.id}, function handleResponse(res){
if(res.success){
var projects = res.data;
// Do something with the data
} else{
// Error getting user's projects
console.log(res.error)
}
})
} else{
// Error getting user
console.log(res.error)
}
})
我想有这样的事情:
webSocketClient
.request('users/read', {id:2})
.then(function(user){
return webSocketClient.request('projects/by-user', {userId: user.id})
})
.then(function(projects){
// Do something with projects
})
.catch(function(err){
// Something went bad
})
什么是推荐的JSON结构实现请求 - 当响应基于WebSockets的API?或者有一个图书馆可以为我做这个?
我目前认为,有关此结构的JSON响应:
{
success: true/false,
data: [if exists],
statusCode: [default 200 for success or 500 for failure],
error: [if exists]
}
我认为,随着使用的,而不是回调的WebSockets的承诺是根本,obious要求工作,但由于某些原因,所有的我发现的图书馆没有用Promises包装回调,这导致了我是否错过了某些问题?
感谢
为什么不写你自己的承诺? –
可能重复的[我如何使用Socket.IO与承诺?](http://stackoverflow.com/questions/21768219/how-can-i-use-socket-io-with-promises) –
@ jfriend00有一个内置的方式来支持回复/确认使用回调,所以标签将不需要http://socket.io/docs/#sending-and-getting-data-(acknowledgements) –