簡體   English   中英

node.js中的回調函數。 TypeError:無法調用未定義的方法“ emit”

[英]Callback function in node.js. TypeError: Cannot call method 'emit' of undefined

我仍在嘗試擺脫回調。 有人可以解釋為什么我不能使用setInterval的回調來更新網頁嗎?

運行代碼時,出現錯誤

/home/pi/Programming/RC Car/server_serialport.js:32
      socket.emit('leftPingStatus', {status: _leftPing});
             ^
TypeError: Cannot call method 'emit' of undefined
    at null.<anonymous> (/home/pi/Programming/RC Car/server_serialport.js:32:14)
    at wrapper [as _onTimeout] (timers.js:252:14)

我的代碼:

var express = require('express');
var app = express()
    ,server = require('http').createServer(app)
    ,io = require('socket.io').listen(server)
    ,wire = require('i2c')
    ,sys = require('sys')
    ,exec = require('child_process').exec;

//Web page status
var _connected = false;
var _leftPing = 0;
var _rightPing = 0;

//SERVER
server.listen(9081, 'raspberrycar.local');
app.use(express.static(__dirname + '/public'));

//SOCKET.IO
io.sockets.on('connection', function (socket){
    _connected = true; //Connected
    socket.emit('serverStatus', {   status: 'Server Connected' }); //Client connected
    socket.emit('arduinoStatus', {   status: 'Arduino Connected' }); //Arduino connected
    socket.on('key', KeyReceived);  //Key received from client
    setInterval(transferData, 50); //Transfer data to/from arduino

    //THIS DOES NOT WORK
    setInterval(function (socket){
        socket.emit('leftPingStatus', {status: _leftPing});
        socket.emit('rightPingStatus', {status: _rightPing});
    }
    , 50) //Transfer data to/from webpage
});

io.sockets.on('disconnect', function (socket){
    _connected = false; //Connected
});

我寧願單獨定義我的函數,從setInterval調用它,然后將套接字傳遞給該函數。 這可能嗎?

您將socket作為參數,但是setInterval不會將參數傳遞給其回調*。 只需利用包含范圍內的socket

setInterval(function() { // Remove socket
    socket.emit('leftPingStatus', {status: _leftPing});
    socket.emit('rightPingStatus', {status: _rightPing});
}
, 50);

就其本身而言,您無法真正在其他地方定義該功能; 您將需要一個函數來返回此函數或接受socket的函數,例如

setInterval(function() {
    doSomething(socket);
}
, 50);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM