全て!
Node/Express/Socket.IO を使用して、同一のコールバックをリファクタリングしたいと考えました。
私は持っている:
io.sockets.on('connection', function(socket) {
socket.on('find all notes' , function() { noteProvider.findAllNotes(function(err, result) {
if(err) {
socket.emit('err', err);
} else {
socket.emit('result', result);
}
}) });
socket.on('find note by id', function(id) { noteProvider.findNoteById(id, function(err, result) {
if(err) {
socket.emit('err', err);
} else {
socket.emit('result', result);
}
}) });
}
しかし、むしろ次のようなものが欲しい:
io.sockets.on('connection', function(socket) {
socket.on('find all notes' , function() { noteProvider.findAllNotes(callback) });
socket.on('find note by id', function(id) { noteProvider.findNoteById(id, callback) });
}
コールバックをリファクタリングするにはどうすればよいですか? 次の 2 つの例は機能しません。
動作しません 1:
var callback = function(err, result) {
if(err) {
socket.emit('err', err);
} else {
socket.emit('result', result);
}
}
動作しません 2:
io.sockets.on('connection', function(socket) {
socket.on('find all notes' , function() { noteProvider.findAllNotes(callback(socket, err, result)) });
socket.on('find note by id', function(id) { noteProvider.findNoteById(id, callback(socket, err, result)) });
}
と
var callback = function(socket, err, result) {
if(err) {
socket.emit('err', err);
} else {
socket.emit('result', result);
}
}
コードを DRY に保つにはどうすればよいですか?
フロデ