我目前在客戶端使用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) –