Как мне написать функцию JS, чтобы сделать что-то, а затем вернуться после завершения этого процесса? - PullRequest
1 голос
/ 29 февраля 2012

Я добавляю некоторые функции в существующую функцию. Мне нужно вставить дополнительный шаг в середине текущей процедуры. Я знаю, как перейти ко 2-й функции, но не знаю, что делать, чтобы вернуться к основной функции после завершения 2-й процедуры.

function step1(){
    perform ajax call to see if student is assigned to a project
    step1_subfunction()
    //  wait here until step1_subfunction is done
    do some more stuff with response from user
}

function step1_subfunction(){
    prompt user via jQuery dialog, 'Add or move employee to the project?'
    //  return to step1 with answer returned from user and resume
}

Я бы гугл это, но я не знаю, есть ли у этого "процесса" имя. Еще во времена Кобола мы называли этого госубом.

ОБНОВЛЕНИЕ: Step1 выполняет вызов ajax, чтобы узнать, назначен ли сотрудник для проекта. Если response.status = 'Assigned', , пользователю будет предложено через диалоговое окно jQuery: «Хотите скопировать или переместить сотрудника в этот проект?». Диалоговое окно jQuery будет step1_subroutine. Ответ будет передан обратно в функцию step1. Оставшаяся часть шага 1 будет просто поместить значение в скрытое текстовое поле «копировать» или «переместить».

Ответы [ 4 ]

0 голосов
/ 29 февраля 2012

Вы можете сделать объект ajax синхронным - IE, никакой код не продолжится, пока не получит ответ. Это третий параметр open (true - асинхронный, false - синхронный).

xmlhttpobject.open('POST', 'url', false);

В некоторых случаях синхронный вызов - это нормально, но его всегда следует избегать, если это возможно.

Другая альтернатива, которая, вероятно, потребует некоторых логических изменений в вашем коде, но в конечном итоге будет лучше, - это связать событие onReadyStateChange. Он срабатывает каждый раз, когда изменяется состояние объекта xmlHttpRequest - вы можете проверить, установлено ли состояние 200, а состояние готовности равно 4, чтобы убедиться, что запрос выполнен и успешно выполнен.

Вот лучший справочник. Удачи.

0 голосов
/ 29 февраля 2012

просто ничего не делай.

то, что вы пытаетесь достичь, это просто «вызов функции»

, поэтому он автоматически вернется к своему вызывающему «стеку» после выполнения.

0 голосов
/ 29 февраля 2012

То, что у вас есть, будет выполнять то, что вы описываете, но может не сделать данные пользователя доступными для функции step1 () без возврата в функцию step1_subfunction (). Ниже я модифицировал ваш пример кода, чтобы продемонстрировать передачу значений обратно.

function step1(){
   //do some stuff
   var returnValFromFunction = step1_subfunction();
   //  wait here until step1_subfunction is done
   //  Now use returnValFromFunction, it contains the information from the user
   do some more stuff with response from user
}

function step1_subfunction(){
    prompt user for some information
   //  return to step1 with information returned from user and resume
   return userResponse;
}
0 голосов
/ 29 февраля 2012

То, что вы написали, должно работать - javascript является однопоточным, так что вы пробовали это?сделано.Когда вторая подпрограмма завершится, область действия и выполнение продолжатся в первой функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...