Можно ли уменьшить код не заварачивая в функцию ?
Если объект не существует, то делаем запрос на объект и после того как ответ получен отправляем штатные функции запроса, а если же объект есть то отправляем штатные запросы. в функции 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, время: 09:18. |