Czy istnieje sposób, aby uruchomić funkcję po zakończeniu kolejne funkcje? Na przykład:jquery funkcje synchroniczne
doSomething();
doSomethingElse();
Chcę tylko doSomethingElse(), aby uruchomić po zakończeniu doSomething. czy to możliwe?
Czy istnieje sposób, aby uruchomić funkcję po zakończeniu kolejne funkcje? Na przykład:jquery funkcje synchroniczne
doSomething();
doSomethingElse();
Chcę tylko doSomethingElse(), aby uruchomić po zakończeniu doSomething. czy to możliwe?
Jeśli funkcja doSomething()
robi coś asynchronicznie (takie jak złożenie żądania Ajax), a następnie będziemy chcieli, aby doSomethingElse()
wywołania zwrotnego dla tej asynchronicznym żądanie, zamiast go wykonać natychmiast po doSomething()
zwrotów.
Składam zapytanie ajaxowe, więc wygląda to jak prawidłowe rozwiązanie, aby umieścić je w wywołaniu zwrotnym, ale próbowałem to zrobić poza wywołaniem zwrotnym. – ngreenwood6
Nie ma mowy, aby egzekwować to wyraźnie per se, ale chodzi o to, aby mieć doSomething() zwraca wartość doSomethingElse() przyjmuje jako parametr:
retval = doSomething();
doSomethingElse(retval);
ten sposób przynajmniej zapobiec kogoś z Wywołanie doSomethingElse() bez podania argumentu, którego potrzebuje ... oczywiście, czy otrzymają ten argument od wywołania doSomething() to inna kwestia. Ale to jest początek.
Idea podnoszone z Kodeksem zakończona.
Nie widzę, jak to rozwiązuje cokolwiek. Jedynym sposobem, aby pytanie miało sens, jest to, że doSomething() robi coś asynchronicznego. Powracanie i przekazywanie wartości nie ma wpływu na czas wykonania pracy. – Nosredna
Właściwie można robić, co chcesz z jQuery (przynajmniej w pewnym sensie). Można to uznać za trochę hacky, ale działa bezbłędnie.
Wystarczy zawierać element na stronie, która nie używać do niczego innego. na przykład pusty gdzieś.
<div id="syncFnHolder"></div>
A potem to JS ze swoimi funkcjami + funkcja runMe
napisany przeze mnie.
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");
To wygeneruje trzy alerty o odległości 1 s między nimi, mówiąc "Pierwszy", "Drugi", "Trzeci".
Jeśli nie chcesz opóźnienia, usuń setTimeout i po prostu zostaw połączenie na $(selec).dequeue("syncFnQueue");
.
Jeśli funkcje potrzebne parametry np doSomething(x,y,z)
Musisz zaadaptować funkcję runMe
, aby była lepsza częściowo i aby skonstruować zwróconą funkcję w inny sposób. Sprawdź tutaj lub opublikuj nowe pytanie.
bardzo interesujące – gpilotino
Dlaczego po prostu nie kolejkowania i odstąpienia w obiekcie JS. Wydaje się bezcelowe, aby umieścić go w dummy DOM. – nickytonline
? Jak mogę to zrobić w jQuery? Zgaduję, że nie mogę śledzić tego, co masz na myśli o tej porze dnia (02:45). – jitter
Pytanie jest nieco niejasne.
Jeśli funkcje mają asynchronicznych bity do nich, a następnie użyć wywołania zwrotne. Po to są.
Jeśli jednak chcesz wykonywać programowanie aspektowe w JavaScript, spójrz na jQuery-aop.
Możesz to zrobić ....
function doSomething(callback) {
// code for do some thing
// now fire off the callback
if (typeof callback === 'function') {
callback();
}
}
function doSomethingElse() {
}
doSomething(doSomethingElse);
Nie co zaksięgowany już robić to, co chcesz? Czego tu mi brakuje? –
+1, aby zrównoważyć -1. To pytanie jest tak samo ważne jak każde inne. – echo
Czy masz szansę podać nam więcej kodu lub powiedzieć, co próbujesz zrobić? – Nosredna