Можно ли уменьшить код не заварачивая в функцию ?
Если объект не существует, то делаем запрос на объект и после того как ответ получен отправляем штатные функции запроса, а если же объект есть то отправляем штатные запросы. в функции GetJson последний параметр calback вызывается когда ответ принят( можно запрашивать следующий запрос)
Как бы да штатные опросы охотно завернуть в функцию, но логика т.е сразу не видно что за чем вызывается. if(IsBookErrorNotExist()){ GetJson('GetBoorkError.CGI',HandlerState,function(){ GetJson('GetPageVar.CGI',HandlerState,function(){ //----------------------------------------------- //----------------------------------------------- setTimeout(function(){ GetJson('GetSerNumber.CGI',HandlerState); }, 20); //----------------------------------------------- clearTimeout(timerId||0); timerId = setTimeout(function tick() { GetJson('GetPageVar.CGI',HandlerState); timerId = setTimeout(tick, 1000); }, 100); //----------------------------------------------- }); } ); }else{ GetJson('GetPageVar.CGI',HandlerState,function(){ //----------------------------------------------- //----------------------------------------------- setTimeout(function(){ GetJson('GetSerNumber.CGI',HandlerState); }, 20); //----------------------------------------------- clearTimeout(timerId||0); timerId = setTimeout(function tick() { GetJson('GetPageVar.CGI',HandlerState); timerId = setTimeout(tick, 1000); }, 100); //----------------------------------------------- }); } |
pokk, проблема старая, известная как callback hell. Прочитайте этот раздел учебника: https://learn.javascript.ru/async , тут всё подробно расписано по этому вопросу. Скипать частями - не рекомендую, потому что одно из другого там вытекает и могут остаться проблемы с пониманием.
|
О благодарю много нового узнал, правильный подход это использование
asynс функций с await вместо цепочки промиксов? |
Цитата:
clearTimeout(timerId || 0); timerId = setTimeout(function tick() { GetJson('GetPageVar.CGI', HandlerState); timerId = setTimeout(tick, 1000); }, 100); тут написано что-то странное... ;) |
Цитата:
var timerId; clearTimeout(timerId || 0); timerId = setTimeout(function tick() { alert('Ok'); timerId = setTimeout(tick, 1000); }, 100); |
|| 0, с таким подходом можно удалить не тот таймаут, который "в уме" подразумевается...
|
Цитата:
В браузерах это положительное число больше 0. Т.е. таймера с 0 не будет. Просто чел решил сэкономить на if (timerId) {}; Ниндзястайл и не более того... :D |
ksa, действительно, больше нуля :) ... но, все равно, там должен быть setInterval вместо setTimeout...
|
Цитата:
Цитата:
Цитата:
И хотя данный конкретный код технически можно было бы заменить на setInterval, но только потому что сам код ошибочен. Тут, как и в случае с setInterval: если GetJson займёт более 100мс, то одновременные вызовы будут накапливаться пока не станет совсем грустно. Правильный подход вызывать следующий setTimeout только после того как GetJson гарантировано отработал(в данном случае в коллбэке). |
Aetae, +
|
Часовой пояс GMT +3, время: 06:46. |