Не думаю, что вы полностью понимаете асинхронный код.
Нет способа «задержать» JavaScript, как вы пытаетесь (например, wait
или sleep
на других языках). Вызов setTimeout
не останавливает выполнение в этот момент в течение 5 секунд.
Попробуйте представить setTimeout как запрос на передачу переданной функции в очередь, которая будет вызвана в будущем. После этого скрипт сразу же перейдет к следующей строке кода, как и при любом другом вызове функции.
В вашем примере, что-то вроде следующего имело бы больше смысла:
function fnDelay(){
if(mode != 'STOP'){ fnIterateGeocode(); }
else { setTimeout(fnDelay,5000);
}
Это будет вызывать себя каждые 5 секунд, пока mode == 'STOP'
, как только это не произойдет, оно будет вызывать fnIterateGeocode
.