Привет, у меня есть соединение с сокетом, и у меня есть рекурсивная функция с тайм-аутом, ожидающим ответа сокета, и когда я получил ответ, мне нужно отменить тайм-аут, как я могу это сделать?
Мой код:
...
var handshakeTimeout;
socket.on("newTrip", data => {
const {
id: userId,
trip: tripId,
location: userLocation,
socket,
signalId
} = data;
usersOn.push({
id: userId,
socket: socket,
signal: signalId
});
const refused = id => {
sendToDriver();
};
const sendToDriver = () => {
let driver = driversOn.find(
e =>
geolib.isPointWithinRadius(
{
latitude: Number(e.location.lat),
longitude: Number(e.location.long)
},
{
latitude: Number(userLocation.lat),
longitude: Number(userLocation.long)
},
5000
) && e.status === "online"
);
if (!driver) {
return setTimeout(() => sendToDriver(), 8000);
} else {
handshakeTimeout = setTimeout(() => refused(driver.id), 8000);
io.to(driver.socket).emit("tripFound", { userId, tripId });
}
};
sendToDriver();
});
socket.on("acceptTrip", data => {
const { id: driverId, car, location, userId } = data;
clearTimeout(handshakeTimeout);
let user = usersOn.find(e => e.id === userId);
if (user)
return io
.to(user.socket)
.emit("driverFound", { driverId, car, location });
});
...
handshaketimeout - это таймер, но я не могу очистить его в событии сокета acceptTrip. таймер продолжает вызывать функцию «отказано».