Nie trzeba jQuery odroczone kiedy można użyć JavaScript promises zamiast.
function first() {
return new Promise(function(resolve, reject) {
setTimeout((function() {
$('#q').append('first <br>');
resolve("Stuff worked!");
}), 1000);
});
}
function second() {
$('#q').append('second <br>');
}
function third() {
$('#q').append('third <br>');
}
first().then(second).then(third);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="q"></div>
Innym sposobem wykonywania ostatnią linię first().then(second).then(third);
jest przez co
first().then(function() {
second();
third();
});
które można zrobić, ponieważ wiesz, że drugi i trzeci funkcje są funkcjami synchronicznymi w przeciwieństwie do pierwsza funkcja, która jest asynchroniczna.
EDYCJA: Powodem zastosowania obietnicy javascript lub w odpowiedzi guest271314 jest jquery odroczenia, ponieważ jeśli chcesz użyć ponownie, ale najpierw wywołaj coś poza pierwszym lub drugim, po tym jak zrobisz to w innej części kodu, możesz po prostu napisać coś do skutku:
I będziesz pisać to bez zmiany funkcji na pierwszy. Obietnice i odroczenia powodują, że kod asynchroniczny jest bardziej przydatny do wielokrotnego użytku.
EDIT:
Teraz można także spróbować async/await oczekiwaniu obietnicę limitu czasu przed wykonaniem pierwszy drugi i trzeci.
function timeout (ms) {
return new Promise(res => setTimeout(res,ms));
}
function first() {
// $('#q').append('first <br>');
console.log("first");
}
function second() {
// $('#q').append('second <br>');
console.log("second");
}
function third() {
// $('#q').append('third <br>');
console.log("third");
}
async function fireEvents() {
await timeout(1000);
first();
second();
third();
}
console.log("started");
fireEvents().then(()=>console.log("done"));
console.log("after fireEvents");
pan spróbować pisania kodu na końcu w samej funkcji limitu czasu? –
te setTimeout są asynchroniczne, więc nie wiemy, który z nich zostanie wykonany jako pierwszy –