gpt4 book ai didi

javascript - 使用变量传递回调

转载 作者:行者123 更新时间:2023-12-02 15:06:03 25 4
gpt4 key购买 nike

嘿,我认为这是个好主意,不知怎的,它不起作用。我能让它发挥作用吗?或者这被认为是不好的做法?

我有一种数学类应用程序,老师可以将问题发送给学生,然后他们回答。

想法是:在问题显示之前倒计时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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com