嘿,我认为这是个好主意, 不知怎的,它不起作用。我能让它发挥作用吗? 或者这被认为是不好的做法?
我有一种数学类应用程序,老师可以将问题发送给学生,然后他们回答。
想法是:在问题显示之前倒计时5秒, 然后发送问题, 然后倒计时以跟踪学生使用的最长时间。
我认为我不需要两个单独的倒计时函数,因为我只需传入两个函数(一个包含每个刻度要执行的操作,另一个是实际的 cb)。
但它崩溃了未定义计数
有什么提示吗?
socket.on('sendTestProblem', function(msg) {
countdown(function() {
socket.broadcast.to(socket.room).emit('timer', { countdown: count }); // crash on this line
},
function broadcastProblemToStudents() {
socket.broadcast.to(socket.room).emit('testProblem', {problem: msg.problem, timeLimit: timeLimit});
socket.emit('problemSentToStudents');
// after pre-countdown, start countdown for max answering time
countdown(function countdownForAnswers() {
io.in(socket.room).emit('timeLimit', {timeLimit: count});
}, function timeOver() {
io.in(socket.room).emit('timeOver');
}, msg.timeLimit);
})
});
function countdown(emit, cb, timeLimit) {
console.log('countdown');
var count = timeLimit || COUNTDOWN;
var countdown = setInterval(function() {
emit(); // emit this on every tick
count--;
if (count == 0) {
clearInterval(countdown);
cb(); // call this on 0
}
}, 1000);
}
最佳答案
您在倒计时函数的范围内声明了计数变量,并且它对于“emit”回调不可见。您应该将其作为参数传递或在共享范围中声明
countdown(function(count) {
socket.broadcast.to(socket.room).emit('timer', { countdown: count });
},
...
emit(count);
关于javascript - 使用变量传递回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119201/