замедлять код до тех пор, пока не закончится функция ajax? - PullRequest
1 голос
/ 30 июля 2009

Я хочу вызвать fillContent, затем позже вызвать beginEditingQuestion

fillContent(cid, "questions");
beginEditingQuestion(qid);

Проблема в том, что я не могу запустить beginEfitingQuestion, пока не будет выполнен весь ajax в fillContent. Есть ли элегантный способ отложить код? Единственная идея, о которой я могу подумать, - создать совершенно новую функцию fillContentAndBeginEditingQuestion, в которую я копирую и вставляю fillContent в новую функцию, а в последнем вызове ajax добавляю beginEditingQuestion. Это не кажется мне очень элегантным, я хочу повторно использовать fillContent в других контекстах. Что мне делать?

Ответы [ 3 ]

3 голосов
/ 30 июля 2009

Я не думаю, что вы хотите "замедлить", скорее вы хотите подождать, пока что-то завершится, прежде чем начнется следующий этап работы.

Шаблон для этого, используемый на многих языках, заключается в использовании событий.

Концептуально:

Вы регистрируете интерес к событию "DoneFillingContent", говоря, что, пожалуйста, вызовите beginEditingQueue () при получении события.

fillContent отвечает за отправку события всем заинтересованным сторонам. Он не понимает, что делает beginEditingQueue (), это просто часть работы, которую нужно выполнить по завершении.

В простейшей версии шаблона вы просто разрешаете одну функцию обратного вызова.

3 голосов
/ 30 июля 2009

Вы можете заставить fillContent принимать параметр обратного вызова и заставлять его вызывать обратный вызов, когда это будет сделано. По сути, вы бы просто добавили callback (); в тело fillContent в самом конце. Таким образом, вы бы написали что-то вроде этого и в конце выполнили переданную функцию:

fillContent (cid, "questions", function () { beginEditingQuestion (qid); });
0 голосов
/ 30 июля 2009

Похоже, вам нужно изменить «fillContent», чтобы один из его параметров был функцией обратного вызова, которая вызывается при возврате AJAX.

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