Node.js: как обработать обратный вызов с помощью async.js и websocket? - PullRequest
0 голосов
/ 05 февраля 2019

Я создаю REST API для сохранения настроек с определенной камеры, отправляя данные через TCP.Камера взаимодействует через TCP с шаблоном запроса / ответа.
Например: Вы можете отправить «Получить скорость \ n» на камеру, и она ответит «100 кадров в секунду», чтобы получить текущую частоту кадров камеры.

Как получить данные и сохранить их в API?

var command = "rate"; //Array with setting I want to store in my API

function getDataFromCamera(command) { // This function will be iterate in another function
    async.series([
        console.log('Test1'); // console log to test output
        function(callback) {

            CAMERA_TCP_SOCKET.send("get "+command+"\n");
            callback(null,command);
},
     function(callback) {
         console.log('Test2'); // console log to test output
         CAMERA_TCP_SOCKET.onmessage = function(event) {
         callback(null, event.data); // THIS line is the problem. I can't retrieve event.data because i don't know how to callback this variable
     }
}],
     function(err, results) {
         if (err) {
        //Handle the error in some way. Here we simply throw it
             throw err;
         }
         if (results) {
             console.log(results); // expected output : // ['rate','100']
         }
    });
}

В данный момент я получаю эту ошибку:

Test1
Test2
/Users/maximecongi/Desktop/Hologram/node_modules/async/dist/async.js:966
        if (fn === null) throw new Error("Callback was already called.");
                         ^

Error: Callback was already called.
    at /Users/maximecongi/Desktop/Hologram/node_modules/async/dist/async.js:966:32
    at /Users/maximecongi/Desktop/Hologram/node_modules/async/dist/async.js:3885:13
    at W3CWebSocket.CAMERA_TCP_SOCKET.onmessage (/Users/maximecongi/Desktop/Hologram/core/api.js:91:13)
    at W3CWebSocket._dispatchEvent [as dispatchEvent] (/Users/maximecongi/Desktop/Hologram/node_modules/yaeti/lib/EventTarget.js:107:17)
    at W3CWebSocket.onMessage (/Users/maximecongi/Desktop/Hologram/node_modules/websocket/lib/W3CWebSocket.js:234:14)
    at WebSocketConnection.<anonymous> (/Users/maximecongi/Desktop/Hologram/node_modules/websocket/lib/W3CWebSocket.js:205:19)
    at WebSocketConnection.emit (events.js:188:13)
    at WebSocketConnection.processFrame (/Users/maximecongi/Desktop/Hologram/node_modules/websocket/lib/WebSocketConnection.js:554:26)
    at /Users/maximecongi/Desktop/Hologram/node_modules/websocket/lib/WebSocketConnection.js:323:40
    at process.internalTickCallback (internal/process/next_tick.js:70:11)
[nodemon] app crashed - waiting for file changes before starting...

Как решить мою проблему?

1 Ответ

0 голосов
/ 05 февраля 2019

Это потому, что вы слушаете каждое сообщение, и похоже, что вы отправляете 3 команды, и я думаю, каждая команда получает ответ.Этот обратный вызов после первой серии не уничтожен, он жив.Для меня вы должны проверить, является ли ответ для этой конкретной команды, а затем выполнить проблемный обратный вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...