Стиль передачи продолжения плохо сочетается с циклами JavaScript. Вам нужно найти другой способ сделать цикл.
Обратите внимание, что ваш код интерпретируется так:
function test() {
*part 1*
if (*condition*) {
getter();
} // <--- note indentation here
function continuationtest(a) { // <--- and here
}
*use a*
*part 2*
}
Таким образом, вы в настоящее время вообще не используете стиль передачи продолжения. Когда getter()
вызывает continuationtest()
, это, вероятно, дает сбой, поскольку continuationtest()
там не находится.
Пример CPS с циклом может выглядеть следующим образом.
Без CPS
function doSomething(i) {
alert("doing " + i);
}
function doLoop() {
for (i = 0; i < 9; i++)
doSomething(i);
}
С CPS
function doSomething(i, ctn) {
alert("doing " + i);
ctn();
}
function doLoop() {
doLoopStartingAt(0);
function doLoopStartingAt(i) {
if (i < 9)
doSomething(i, function ctn() { doLoopStartingAt(i + 1); });
}
}
(Преимущество CPS заключается в том, что в любой момент вы можете использовать setTimeout()
, чтобы отложить выполнение остальных, или дождаться обработки пользовательского ввода, или избежать отображения в браузере всплывающего окна «медленный скрипт».)