jQuery синхронные функции

В целом необходимо понять, почему Вы хотите адрес. Это для поставки/отправки по почте? Тогда существует действительно только одно требование, имейте отдельную страну. Другие строки являются свободной формой, чтобы быть заполненными в пользователем. Причиной этого является общая передающая стратегия почты: любая входящая почта для иностранного государства пересылается, не смотря на другие строки адреса. Следовательно, подробная информация анализируется только почтовым сортировщиком, расположенным в самой стране. Как получатель, они будут знакомы с национальными соглашениями.

(UPS может сгруппировать вместе некоторые небольшие европейские страны, e.. все Низкие Страны, вероятно, обслуживаются из Бельгии - идея все еще содержит.)

5
задан ngreenwood6 21 November 2009 в 00:35
поделиться

4 ответа

Если ваша функция doSomething () выполняет что-то асинхронно (например, делает запрос Ajax), вам нужно сделать doSomethingElse () обратный вызов для этого асинхронного запроса, вместо того, чтобы выполнять его сразу после возврата doSomething () .

7
ответ дан 18 December 2019 в 09:50
поделиться

На самом деле вы можете делать с jQuery все, что хотите (по крайней мере, в некотором смысле). Это может показаться немного хакерским, но работает безупречно.

Просто включите на свою страницу элемент, который вы не используете ни для чего другого. например, пустой div где-нибудь.

<div id="syncFnHolder"></div>

А затем включите JS с вашими функциями + функцию runMe , написанную мной.

function doSomething() { alert("First"); }
function doSomethingElse() { alert("Second"); }
function doSomethingElseThree() { alert("Third"); }

function runMe(fn, selec) {
    return function() {
        fn();
        setTimeout(function() {
            $(selec).dequeue("syncFnQueue");
        }, 1000);
    } 
};

var selector = "#syncFnHolder";
//add three functions to a queue
$(selector).queue("syncFnQueue", runMe(doSomething, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElse, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElseThree, selector));
//start first function in queue (FIFO) others are triggered automatically
$(selector).dequeue("syncFnQueue");

Это сгенерирует три предупреждения с расстоянием в 1 с между ними, говорящим "Первый" , "Second", "Third".

Если вы не хотите, чтобы задержка была удалена, удалите setTimeout и просто оставьте вызов $ (selec) .dequeue ("syncFnQueue"); .

Если ваш функциям требуются параметры, например doSomething (x, y, z) , вам необходимо адаптировать функцию runMe , чтобы она была лучше партиала, и по-другому построить возвращаемую функцию. Отметьте здесь или разместите новый вопрос.

javascript partial

6
ответ дан 18 December 2019 в 09:50
поделиться

Вопрос немного расплывчатый.

Если ваши функции содержат асинхронные биты, используйте обратные вызовы. Для этого они предназначены.

Если, однако, вы хотите заниматься аспектно-ориентированным программированием на JavaScript, обратите внимание на jQuery-aop .

2
ответ дан 18 December 2019 в 09:50
поделиться

Нет никакого способа принудительно применить это явным образом, но одна идея состоит в том, чтобы doSomething () возвращал значение, которое doSomethingElse () принимает в качестве параметра:

  retval = doSomething();
  doSomethingElse(retval);

таким образом вы, по крайней мере, предотвратите кто-то вызвал doSomethingElse (), по крайней мере, не предоставив аргумент, который ему нужен ... конечно, получат ли они этот аргумент от вызова doSomething () - это еще одна проблема. Но это только начало.

Идея взята из Code Complete.

-1
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: