Возможно ли написать код, который обернет любой ноль / н-колбэк моей собственной функцией?
(Когда я говорю «функция обратного вызова ввода / вывода», я имею в виду функцию, которая вызывается после некоторого действия ввода / вывода)
Зачем мне такая вещь? пример: у меня есть сервер socket.io
У меня есть куча глобальных функций, которые я на самом деле получаю в качестве входных данных (я не могу изменить их, даже не читая, я просто вставляю их как есть в моем коде)
обратный вызов socket.io.connect (socket, ... callback) взаимодействует с этими глобальными функциями. Теперь при новом подключении мы устанавливаем доступ к текущему сокету на глобальном уровне.
программисты, написавшие эти глобальные функции, знают о переменной currentSocket и используют ее ..
Проблема в том, что после вызова некоторой асинхронной функции ввода-вывода другой пользователь / сокет может подключиться и изменить currentSocket, позже, когда асинхронная функция ввода-вывода будет выполнена, currentSocket будет равен другому пользователю / сокету а не исходный пользователь / сокет, который вызвал эту асинхронную функцию
Я подумал, что, может быть, мне удастся как-то автоматически обернуть обратный вызов ввода-вывода и закрыть переменную currentSocket, но я не уверен, как это сделать ...
есть идеи?
var currentSocket = undefined;
io.sockets.on('connection', function (socket) {
currentSocket = socket;
socket.on('msg', function (data) {
global[data.functionToInvoke];
});
});
//global function that I can't change or even analyze/read
//========================================================
function g1(){
//might use currentSocket
//might invoke async stuff like
fs.readfile(...cb)
}
function g2(){
//might use currentSocket
//might invoke async stuff like
redisClient.get(...cb)
}