В настоящее время я использую Node.js в качестве сервера (Express.js) и AngularJs на стороне клиента, переключившись с HTTP-API на WebSockets (используя Socket.io) из-за улучшения производительности.Управление потоками WebSockets с использованием Promises
Поскольку WebSockets не имеет кодов состояния/управления ошибками и просто возвращает JSON с необязательным обратным вызовом, я должен реализовать это управление ошибками. Я хочу поведение консистенции при возникновении ошибки, и вместо того, чтобы делать эту ошибку вручную, я хочу обернуть ее, чтобы уменьшить киля в моем коде, используя обещания по плохой старой базе данных.
Например, вместо использования сырой 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 при реализации request- ответ API на основе WebSockets? Или есть библиотека, которая может это сделать для меня?
Я в настоящее время думает о JSON с этой структурой в ответ:
{
success: true/false,
data: [if exists],
statusCode: [default 200 for success or 500 for failure],
error: [if exists]
}
Я думаю, что работает с WebSockets использования Обещания вместо обратных вызовов является одним из основного и obious требования, но по какой-то причине все библиотеки, которые я нашел, не завернули обратные вызовы с помощью обещаний, что приводит меня к вопросу, если я чего-то не хватает?
Благодаря
Почему бы не написать свои собственные обещания? –
Возможный дубликат [Как использовать Socket.IO с обещаниями?] (Http://stackoverflow.com/questions/21768219/how-can-i-use-socket-io-with-promises) –
@ jfriend00 Существует встроенный способ поддержки ответов/подтверждений с использованием обратных вызовов, поэтому тегирование не требуется. http://socket.io/docs/#sending-and-getting-data-(обновления) –