Есть вот такой код:
longPoll(callback) {
let longPollMap = new Map();
this.arg = 0;
longPollMap.set('getLongPoll', () => {
this.callMethod('messages.getLongPollServer', {}, (body) => {
this.tempPoll = JSON.parse(body)['response'];
longPollMap.get('callLongPoll')();
});
});
longPollMap.set('callLongPoll', () => {
if(this.cap==false) {
request({
url: 'https://'+this.tempPoll['server'],
qs: {
act: 'a_check',
key: this.tempPoll['key'].substr(0, (this.tempPoll['key'].length - 10)),
ts: this.tempPoll['ts'],
wait: 25,
mode: 2
}
}, (error, response, body) => {
try {
body = JSON.parse(body);
if('failed' in body)
longPollMap.get('getLongPoll')();
else {
this.tempPoll['ts'] = body['ts'];
}
callback(body);
longPollMap.get('callLongPoll')();
} catch(e) {
console.log('LONGPOLL: '+e);
longPollMap.get('getLongPoll')();
}
});
} else longPollMap.get('callLongPoll')();
});
longPollMap.get('getLongPoll')();
}
Как только cap становится true, должна происходить рекурсия до тех пор, пока не станет false (выполняет другая функция). Но беда в том, что возвращается ошибка RangeError: Maximum call stack size exceeded и приложение перезапускается. Как правильно сделать рекурсию?