В целом необходимо понять, почему Вы хотите адрес. Это для поставки/отправки по почте? Тогда существует действительно только одно требование, имейте отдельную страну. Другие строки являются свободной формой, чтобы быть заполненными в пользователем. Причиной этого является общая передающая стратегия почты: любая входящая почта для иностранного государства пересылается, не смотря на другие строки адреса. Следовательно, подробная информация анализируется только почтовым сортировщиком, расположенным в самой стране. Как получатель, они будут знакомы с национальными соглашениями.
(UPS может сгруппировать вместе некоторые небольшие европейские страны, e.. все Низкие Страны, вероятно, обслуживаются из Бельгии - идея все еще содержит.)
Если ваша функция doSomething ()
выполняет что-то асинхронно (например, делает запрос Ajax), вам нужно сделать doSomethingElse ()
обратный вызов для этого асинхронного запроса, вместо того, чтобы выполнять его сразу после возврата doSomething ()
.
На самом деле вы можете делать с 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, обратите внимание на jQuery-aop .
Нет никакого способа принудительно применить это явным образом, но одна идея состоит в том, чтобы doSomething () возвращал значение, которое doSomethingElse () принимает в качестве параметра:
retval = doSomething();
doSomethingElse(retval);
таким образом вы, по крайней мере, предотвратите кто-то вызвал doSomethingElse (), по крайней мере, не предоставив аргумент, который ему нужен ... конечно, получат ли они этот аргумент от вызова doSomething () - это еще одна проблема. Но это только начало.
Идея взята из Code Complete.